Opencv图像形态学运算总结——腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度

Opencv中提供了图像形态学运算的接口,像基本的腐蚀膨胀都有自己单独的函数接口,但实际上调用morphologyEx()一个函数接口使用不同的参数就可以完成所有常见的形态学运算,包括腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度。

示例:

Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));
morphologyEx(src, dst, MORPH_DILATE, element);

element是运算核(内核矩阵),从getStructuringElement()函数返回获取一个矩阵,getStructuringElement()函数定义了运算核的类型,MORPH_RECT代表的是矩形的运算核,还可以选择MORPH_ELLIPSE椭圆核和MORPH_CROSS十字形核;第二个参数是设置运算核的大小cv::Size()。

morphologyEx()函数第一个参数为原图像(待运算的图像),第二个参数为目标图像(运算生成的图像),第三个参数最为重要,为运算类型,关于不同标识符作为参数输入与对应的运算类型有一个表非常详细:

标识符 运算类型
MORPH_ERODE 腐蚀
MORPH_DILATE 膨胀
MORPH_OPEN 开运算
MORPH_CLOSE 闭运算
MORPH_GRADIENT 形态学梯度
MORPH_TOPHAT 顶帽运算
MORPH_BLACKHAT 黑帽运算

最后一个参数就是已经设置好的内核矩阵element。

  • 腐蚀与膨胀

腐蚀与膨胀是形态学中最基本的运算,其实所谓的”腐蚀“与”膨胀“都是针对亮度较高的像素而言的,腐蚀运算会将高亮像素区域局部缩小,而膨胀运算会将高亮像素区域局部放大。

Opencv图像形态学运算总结——腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度_第1张图片 原图
Opencv图像形态学运算总结——腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度_第2张图片 腐蚀图
Opencv图像形态学运算总结——腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度_第3张图片 膨胀图
  • 开运算与闭运算

开运算与闭运算都是在腐蚀膨胀的基础上进行的;准确地说,开运算就是先进行腐蚀再进行膨胀,可以消除图像中较小的亮点(在前景检测中开运算能够很好的消除二值前景图像中的噪声点);闭运算就是先进行膨胀再进行腐蚀,可以消除图像中小型的黑洞

Opencv图像形态学运算总结——腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度_第4张图片 原图
Opencv图像形态学运算总结——腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度_第5张图片 开运算图
Opencv图像形态学运算总结——腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度_第6张图片 闭运算图

 

  •  形态学梯度

形态学梯度与开闭运算一样,是在腐蚀膨胀的基础上进行的运算;不同的是形态学梯度图是膨胀图与腐蚀图做差分得到的图像,通过膨胀图减去腐蚀图可以得到图像的边缘轮廓区域的像素。

Opencv图像形态学运算总结——腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度_第7张图片 原图
Opencv图像形态学运算总结——腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度_第8张图片 形态学梯度图
  • 顶帽与黑帽

顶帽:原图像与开运算图之差,用于分离局部较亮区域的像素

黑帽:闭运算与原图像之差,用于分离局部较暗区域的像素

Opencv图像形态学运算总结——腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度_第9张图片 原图
Opencv图像形态学运算总结——腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度_第10张图片 顶帽运算图
Opencv图像形态学运算总结——腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度_第11张图片 黑帽运算图

 

你可能感兴趣的:(图像处理,OpenCV,计算机视觉)