【C++ OpenCV】图像的膨胀、腐蚀、开运算以及闭运算

1.形态学操作

图形的形态学操作-基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学
形态学有四个基本操作:腐蚀、膨胀、开运算、闭运算
膨胀和腐蚀是图像处理中最常用的形态学操作手段

2. 图像的膨胀(背景膨胀,图像变小)

与卷积操作类似,假设有图像A和结构元素B,结构元素B在A上边移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任何形状。

3. 图像的腐蚀(背景被图像腐蚀,图像变大)

腐蚀跟膨胀操作的过程类似,唯一不同的是以最小值替换锚点重叠下的像素值。

4. 开运算-open

先腐蚀,再膨胀
假设图像前景色是白色,背景色是黑色。可以去掉图像上一些小的对象

5. 闭运算-close

先膨胀,再腐蚀
闭运算可以填充小洞,填充小的噪点

6. 形态学梯度

膨胀减腐蚀

dst=morphgrad(src,element)=dilate(src,element)-erode(src,element)

又称基本梯度(其他还包括内部梯度,方向梯度)

7. 相关API


getStructuringElement(int shape,size ksize,point anchor)		//用于生成卷积核
		-shape(形状)(MORPH_REACT\MORPH_CROSS\MORPH_ELLIPSE)
		-size(大小)
		-point(锚点) 默认是point(-1,-1)意思就是中心像素
	dilate(src,dst,kernel)  膨胀
	erode(src,dst,kernel)  腐蚀
morphologyEx(src, dst, MORPH_BLACKHAT, kernel);
	-Mat src -输入图像
	-Mat dst-输出图像
	-类型MORPH_OPEN(开运算),MORPH_CLOSE(闭运算),
 MORPH_GRADIENT(形态学梯度), MORPH_TOPHAT(顶帽:原图像-开运算的结果),
 MORPH_BLACKHAT(黑帽:闭运算图像-源图像的结果)
	-Mat kernel 结构元素,结构元素的大小取决于噪点的大小
	-int iteration迭代次数,默认是1

代码演示:

#include <opencv2/opencv.hpp>
#include<iostream>
#include<math.h>

using namespace cv;
using namespace std;

Mat src,dst;
char OUTPUT[] = "output image";
int element_size = 3;
int max_size = 21;

void CallBack_Demo(int, void*) {
	int s = element_size * 2 + 1;
	Mat kernel = getStructuringElement(MORPH_RECT, Size(s,s), Point(-1, -1));
	dilate(src, dst, kernel, Point(-1, -1), 1);  //膨胀
	erode(src,dst,kernel);  //腐蚀
	imshow(OUTPUT, dst);
	return;
}

int main(int argc, char** argv) {
	
	src = imread("D:/image/img1.jpg");
	
	if (!src.data) {
		printf("could load imgage....\n");
		return -1;
	}
	namedWindow("src", WINDOW_AUTOSIZE);
	imshow("src", src);
	
	namedWindow(OUTPUT,WINDOW_AUTOSIZE);
	//createTrackbar("Element Size:", OUTPUT_WIN, &element_size, max_size, CallBack_Demo);   //生成一个滑块
	//先创建Trackbar,在这里边先调用CallBackDemo,会在CallBackDemo上生成一个滑块,然后再调用执行CallBackDemo
	//CallBack_Demo(0, 0);
	
	Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
	morphologyEx(src, dst, MORPH_OPEN, kernel);
	imshow(OUTPUT, dst);  


	waitKey(0);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值