相关API(morphologyEx)
对图像形态学操作的专用API
morphologyEx(src,dest,CV_MOP_BLACKHAT,kernel,int iteration)
{
Mat src ;输入图像
Mat dest ;输出结果
CV_MOP_BLACKHAT ;
}
开操作(open)
方法:
先腐蚀(erode)后膨胀(dilate)
作用:
当目标对象有小的噪点干扰时,可以通过该办法清楚干扰项
实例展示
原图是这样的
通过开操作后变成这样的
可以看出,通过开操作后,目标对像周围的干扰对象被显著降低,但目标对象不受影响,多说无益,直接上操作的代码
Mat kernel = getStructuringElement(MORPH_RECT, Size(9, 9), Point(-1, -1));
//获取结构元素,调整这里的Size就可以去掉不同大小的干扰,注意确保Size是奇数
morphologyEx(img, dst, MORPH_OPEN, kernel);//通过morphologyEx进行开操作,其中的MORPH_OPEN就是开操作
imshow("原图", img);
imshow("开操作后", dst);
闭操作(close)
方法:
先膨胀(dilate)后腐蚀(erode)
作用:
可以填充影响主要对象的小洞(fill hole)
实例展示
原图如下
闭操作后图如下
代码
Mat kernel = getStructuringElement(MORPH_RECT, Size(9, 9), Point(-1, -1));
//获取结构元素
morphologyEx(img, dst, MORPH_CLOSE, kernel);
//通过morphologyEx进行操作,其中的MORPH_CLOSE就是闭操作
imshow("原图", img);
imshow("闭操作后", dst);
顶帽(tophat)
作用
原图像与开操作的差值图像,换句话说说,就是获取开操作去掉的目标
实例展示
原图:
顶帽后:
黑帽(blackhat)
作用
原图像与闭操作后的差值图像,简而言之,就是提取闭操作填补的洞的图像
实例演示
原图像:
黑帽后:
代码
Mat kernel = getStructuringElement(MORPH_RECT, Size(9, 9), Point(-1, -1));
morphologyEx(img, dst, MORPH_BLACKHAT, kernel);//黑帽
imshow("原图", img);
imshow("黑帽", dst);
形态学梯度(基本梯度)
实现
膨胀操作后图像减去腐蚀后图像
实例演示
操作之前:
基本梯度:
代码
Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
morphologyEx(img, dst, MORPH_GRADIENT, kernel);//形态学梯度
imshow("原图", img);
imshow("基本梯度", dst);
补充
博主也是刚刚接触opencv对于形态学梯度的其他具体用法,日后再做具体补充