OpenCV2学习(2)之图像腐蚀与膨胀

图像腐蚀与膨胀概念:

图片的腐蚀和膨胀是针对图片中白色部分(高亮部分)而言的,而不是黑色部分。腐蚀就是原图中的高亮部分被腐蚀,“领域被蚕食”,效果图拥有比原图更小的高亮区域。而膨胀就是将图像中的高亮部分进行膨胀,“领域扩张”,效果图拥有比原图更大的高亮区域。

1、膨胀:

核心解读:膨胀就是求局部最大值的操作。区域B与区域A卷积,即是计算区域B覆盖的区域的像素点最大值(即白色),并且将这个最大值赋值给参考点指定的像素(即可理解为区域B与区域A相接的点),这样就会使图像中的高亮区域逐渐增加!

2、腐蚀:

核心解读:腐蚀就是求局部最小值的操作。区域B与区域A卷积,即是计算区域B覆盖的区域的像素点最小值(即黑色),并且将这个最大值赋值给参考点指定的像素(即可理解为区域B与区域A重叠的点),这样就会使图像中的高亮区域逐渐减少,即被腐蚀了!

主要的应用场景是:消除噪声、分割出独立的图像元素,在图像中连接相邻的元素(将图像与背景连接更自然)、寻找图像中的明显的极大值区域或极小值区域、求出图像的梯度。

简单例子:

//头文件
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

//包含的命名空间
using namespace cv;

//主程序
int main()
{
	//载入原图  
	Mat srcImage = imread("F:/Image/girl.jpeg");

	//初始化窗口,CV_WINDOW_NORMAL---用户可以改变窗口大小
	cvNamedWindow("原图", CV_WINDOW_NORMAL);
	cvNamedWindow("腐蚀效果图", CV_WINDOW_NORMAL);
	cvNamedWindow("膨胀效果图", CV_WINDOW_NORMAL);

	//获取自定义核,getStructuringElement函数可以获取自定义的形状与尺寸的内核
	Mat element1 = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dstImage1;
	//用自定义的内核进行腐蚀操作
	erode(srcImage, dstImage1, element1);

	//获取自定义核,getStructuringElement函数可以获取自定义的形状与尺寸的内核
	Mat element2 = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dstImage2;
	//用自定义的内核进行膨胀操作
	dilate(srcImage, dstImage2, element2);

	//显示原图
	imshow("原图", srcImage);

	//显示效果图 
	imshow("腐蚀效果图", dstImage1);
	imshow("膨胀效果图", dstImage2);
	waitKey(0);

	return 0;
}

输出结果:

猜你喜欢

转载自blog.csdn.net/kou_ching/article/details/85346777