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