OpenCV C++ 简单小技巧 - 形态学 (6

Mat kernal = Mat::ones(7,7, CV_8U);

腐蚀 / 收缩

erode(frame, f1, kernal,{-1,-1},10);

膨胀 / 扩张

dilate(frame, f2, kernal,{-1,-1},10);

开运算

先腐蚀,后膨胀
morphologyEx(frame, f3, MORPH_OPEN, kernal,{-1,-1},10);

闭运算

先膨胀,后腐蚀
morphologyEx(frame, f4, MORPH_CLOSE, kernal,{-1,-1},10);

梯度

膨胀和腐蚀之间的差异图,可以得到图像的轮廓
morphologyEx(frame, f5, MORPH_GRADIENT, kernal);

TOPHAT 和 BLACKHAT

分别是开运算和闭运算与原图的差

image.png

很有趣的是,缩小和扩张都能有效保留边缘的特征。闭运算可以有效去除内部杂质,开运算可以有效去除外部杂质,而梯度可以扣到轮廓,可用于纹理的分离处理。比如你想把一个脸尽可能的磨成鸡蛋,但是五官又需要十分清晰,那么在双边模糊操作前,是需要进行轮廓提取的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容