OpenCV-形态学处理-morphologyEx

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wxcdzhangping/article/details/74454142

OpenCV提供的形态学处理函数,主要有三个参数:

1:结构元:影响结构元的除了形状就是结构元的半径

2:形态学处理类型

3:迭代次数

基于这三个点我们通过导航条调节这三个参数,代码如下:

#include<opencv2/core.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/highgui.hpp>
using namespace cv;
#include<string>
using namespace std;
Mat img;//输入图像
Mat dst;//输出图像
Mat element;//结构元
//结构元的半径
int r = 1;
int MAX_r = 20;
//形态学处理的次数
int iter = 1;
int MAX_ITER = 30;
//形态学处理类型
/*
enum MorphTypes{
    MORPH_ERODE    = 0, 
    MORPH_DILATE   = 1, 
    MORPH_OPEN     = 2, 
    MORPH_CLOSE    = 3, 
    MORPH_GRADIENT = 4, 
    MORPH_TOPHAT   = 5, 
    MORPH_BLACKHAT = 6, 
    MORPH_HITMISS  = 7 
};
*/
int morphType = 0;
int MAX_MORPHTYPE = 6;
//窗口
string windowName = "形态学处理";
//回调函数
void callback(int, void*);
int main(int argc, char*argv[])
{
	//输入图像
	img = imread(argv[1], IMREAD_ANYCOLOR);
	if (!img.data)
		return -1;
	//窗口
	namedWindow(windowName, 1);
	createTrackbar("半径:", windowName, &r, MAX_r, callback);
	createTrackbar("次数:", windowName, &iter, MAX_ITER, callback);
	createTrackbar("类型:", windowName, &morphType, MAX_MORPHTYPE, callback);
	callback(0, 0);
	waitKey(0);
	return 0;
}
//回调函数
void callback(int, void*)
{
	//结构元
	element = getStructuringElement(MORPH_ELLIPSE, Size(2 * r + 1, 2 * r + 1), Point(-1, -1));
	//形态学处理 
	morphologyEx(img, dst, morphType, element, Point(-1, -1), iter);
	//保存形态处理的结果
	//imwrite("mor.jpg", dst);
	imshow(windowName, dst);
}


猜你喜欢

转载自blog.csdn.net/wxcdzhangping/article/details/74454142