图像腐蚀与膨胀概念:
图片的腐蚀和膨胀是针对图片中白色部分(高亮部分)而言的,而不是黑色部分。腐蚀就是原图中的高亮部分被腐蚀,“领域被蚕食”,效果图拥有比原图更小的高亮区域。而膨胀就是将图像中的高亮部分进行膨胀,“领域扩张”,效果图拥有比原图更大的高亮区域。
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;
}
输出结果: