文章目录
使用的示例图像
使用的kernel
kernel = getStructuringElement(CV_SHAPE_RECT, Size(11, 11), Point(-1, -1));
基本操作
膨胀和腐蚀的主语都是亮区
膨胀
结构元素B在图像A上移动,B的中心为锚点(如果不改变预设参数的话),用B覆盖下A的最大像素值替换锚点的像素。
示例程序
dilate(src, dst_1, kernel);
输出图像
腐蚀
与膨胀类似,以最小值替换。
示例程序
erode(src, dst_2, kernel);
输出图像
根据以上两种基本操作,有下列形态学操作
形态学操作
用到的
开操作 open
先腐蚀后膨胀。
可以去掉小的对象,假设对象是前景色,背景是黑色。
示例程序
morphologyEx(src, dst_3, CV_MOP_OPEN, kernel);
输出图像
闭操作 close
先膨胀后腐蚀
可以去掉小的洞,假设背景为黑色,对象是前景色。
示例程序
morphologyEx(src, dst_4, CV_MOP_CLOSE, kernel);
输出图像
顶帽 tophat
原图像与开操作的差值。
可以保留小的对象,假设情况同上。
示例程序
morphologyEx(src, dst_5, CV_MOP_TOPHAT, kernel);
输出图像
黑帽 blackhat
原图像与闭操作的差值。
可以保留小的洞,假设情况同上。
示例程序
morphologyEx(src, dst_6, CV_MOP_BLACKHAT, kernel);
输出图像
形态学梯度 gradient
膨胀减去腐蚀,又称为基本梯度,还有内部梯度(腐蚀减原图)和方向梯度(x和y方向进行计算)。
示例程序
morphologyEx(src, dst_7, CV_MOP_GRADIENT, kernel);
输出图像
总结
形态学操作在二值化图像的处理中十分实用,其效果与kernel的大小、形状都有关系,需要根据实际情况选择。