openCV学习笔记十一:膨胀与腐蚀(二)

膨胀与腐蚀(二)

首先,定义核(获取结构元素)——getStructuringElement()
形态学其他操作,基于膨胀和腐蚀,利用morphologyEx()函数进行操作.
开运算(参数为MORPH_OPEN)
闭运算(参数为MORPH_CLOSE)
顶帽(参数为MORPH_TOPHAT)
黑帽(参数为MORPH_BLACKHAT)

膨胀就是对图像高亮部分进行“领域扩张”,效果图拥有比原图更大的高亮区域;腐蚀是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域。
膨胀
膨胀就是求局部最大值的操作,从图像直观看来,就是将图像光亮部分放大,黑暗部分缩小。
开运算:先腐蚀再膨胀,用来消除小物体
闭运算:先膨胀再腐蚀,用于排除小型黑洞
形态学梯度:就是膨胀图与俯视图之差,用于保留物体的边缘轮廓。
顶帽:原图像与开运算图之差,用于分离比邻近点亮一些的斑块。
黑帽:闭运算与原图像之差,用于分离比邻近点暗一些的斑块。
opencv里有一个很好的函数getStructuringElement,我们只要往这个函数传相应的处理参数,就可以进行相应的操作了,使用起来非常方便。

openCV学习笔记十一:膨胀与腐蚀(二)_第1张图片
实例代码如下:
#include
#include
#include
#include

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
Mat srcImg = imread(“1.JPG”, CV_LOAD_IMAGE_COLOR);
Mat dstImg;
Mat element = getStructuringElement( MORPH_RECT, Size(5, 5) );//MORPH_RECT,矩形;MORPH_CROSS,交叉形;MORPH_ELLIPSE,椭圆形//内核尺寸
cout << element << endl; //在控制台输出kernel
///膨胀
//dilate(srcImg, dstImg, element, Point(-1, -1), 1);//输入图像//输出图像定义的kernel ////锚点位置,默认值Point(-1,-1),表示位于中心//膨胀的次数
///腐蚀
/* erode(srcImg, dstImg, element, Point(-1, -1), 1);*/
//morphologyEx(srcImg, dstImg, MORPH_OPEN, element); //开运算
//morphologyEx(srcImg, dstImg, MORPH_CLOSE, element); //闭运算
morphologyEx(srcImg, dstImg, MORPH_GRADIENT, element); //形态学梯度运算
//morphologyEx(srcImg, dstImg, MORPH_TOPHAT, element); //顶帽运算
//morphologyEx(srcImg, dstImg, MORPH_BLACKHAT, element); //黒帽运算
imshow(“src”, srcImg);
imshow(“dst”, dstImg);
waitKey(0);
}

openCV学习笔记十一:膨胀与腐蚀(二)_第2张图片
运行结果如下:
openCV学习笔记十一:膨胀与腐蚀(二)_第3张图片

你可能感兴趣的:(OpenCV学习笔记)