opencv学习-滑动条应用

Posted 殇堼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv学习-滑动条应用相关的知识,希望对你有一定的参考价值。

滑动条英文翻译就是trackbar。
在opencv中,提供了trackbar功能。
比如通过trackbar实现动态调整卷积核的大小,就不必要先修改代码,然后再编译,直接滑动条即可。
或是应用于形态学中,形态学中有多种变化操作。

应用1-用于形态学类型变化

1.1形态学操作和数字之间的对应关系:

enum MorphTypes{
MORPH_ERODE = 0, //腐蚀
MORPH_DILATE = 1, //膨胀
MORPH_OPEN = 2, //开操作
MORPH_CLOSE = 3, //闭操作
MORPH_GRADIENT = 4, //梯度操作
MORPH_TOPHAT = 5, //顶帽操作
MORPH_BLACKHAT = 6, //黑帽操作
};

1.2代码演示

#include<opencv2\\opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;


//注意这一块定义要放在开头,不能放在函数当中。
Mat src, dst;
//为了方便表达,命名两个字符串:将inputImage赋值于变量inimg;将outputImage赋值于变量outimg;
char inimg[] = "inputImage";
char outimg[] = "outputImage";

//定义changeTrackbar函数
void changeTrackbar(int pos, void*usrdata) {
	Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));//创建卷积核,并且固定的
	morphologyEx(src, dst, pos, kernel); //参数pose代表形态学中的多种操作,
	imshow(outimg, dst);//随着滑动,形态学操作类型也相对变动,之后显示操作后的图像
}

int main()
{
	src = imread("D:/images/lena.png");
	if (src.empty())
	{
		cout << "could not load image !";
		return -1;
	}

	//为两个变量创建窗口并显示输入图像。
	namedWindow(inimg, WINDOW_AUTOSIZE);
	namedWindow(outimg, WINDOW_AUTOSIZE);
	imshow(inimg, src);

	//定义参数和创建滑动条
	int initValue = 2;
	int maxSize = 6;//设置滑动条上最大拖动值为6,加上0,刚好是对应形态学中的7种操作
	createTrackbar("kernel", outimg, &initValue, maxSize, changeTrackbar);//回调自定义的changeTrackbar函数

	waitKey(0);
	return 0;
}

1.3结果

在这里插入图片描述

2.滑动条用于卷积核

2.2代码演示

#include<opencv2\\opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

Mat src, dst;
char inimg[] = "【inputImage】";
char outimg[] = "【outputImage】";
void changeTrackbar(int pos, void*usrdata) {
	Mat kernel = getStructuringElement(MORPH_RECT, Size(2 * pos + 1, 2 * pos + 1), Point(-1, -1));
	morphologyEx(src, dst, 0, kernel);
	imshow(outimg, dst);
}
int main()
{
	src = imread("D:/images/lena.png");
	if (src.empty())
	{
		cout << "could not load image !";
		return -1;
	}

	namedWindow(inimg, WINDOW_AUTOSIZE);
	namedWindow(outimg, WINDOW_AUTOSIZE);

	imshow(inimg, src);

	int initValue = 2;
	int maxSize = 10;
	createTrackbar("kernel", outimg, &initValue, maxSize, changeTrackbar);

	waitKey(0);
	return 0;
}

2.3结果

在这里插入图片描述

以上是关于opencv学习-滑动条应用的主要内容,如果未能解决你的问题,请参考以下文章

opencv学习之路鼠标和滑动条操作

OpenCV 轨迹条Trackba应用

OpenCV 轨迹条Trackba应用

python opencv:使用滑动条做调色板

番外5. Python OpenCV 中滑动条详细说明与常见问题解决方案

番外5. Python OpenCV 中滑动条详细说明与常见问题解决方案