将各点像素值替换为对应邻域上的最小值,常用来去除图形的一些毛边
void erode( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() )
膨胀操作是腐蚀操作的逆操作
void cv::dilate ( InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue()
)
开操作 = 腐蚀+膨胀 ,输入图像 + 结构元素
作用:主要是应用在二值图像分析中,灰度图像亦可;用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积.提取水平或竖直的线。
闭操作 = 膨胀+腐蚀 ,输入图像 + 结构元素
作用:主要是应用在二值图像分析中,灰度图像亦可;用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。
void cv::morphologyEx ( InputArray src,
OutputArray dst,
int op,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue()
)
Mat dilate_kernal = getStructuringElement(MORPH_ELLIPSE, Size(5, 5)); //膨胀核
cv::morphologyEx(fgmask, fgmask, cv::MORPH_OPEN, dilate_kernal);
梯度运算等价于膨胀运算-腐蚀运算
对二值图像进行这一操作可以将团块(blob)的边缘突出出来。我们可以用形态学梯度来保留物体的边缘轮廓
void cv::morphologyEx ( InputArray src,
OutputArray dst,
int op,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue()
)
Mat gradient_kernal = getStructuringElement(MORPH_ELLIPSE, Size(5, 5)); //膨胀核
cv::morphologyEx(fgmask, fgmask, cv::MORPH_GRADIENT, gradient_kernal );
op输入为MORPH_GRADIENT即为梯形运算
顶帽操作是源图像与图像开运算结果之间的差,它把开运算“去掉”的细节显现出来。
我们回顾下开运算的作用:
那么顶帽运算的作用便是:
黑帽操作是闭运算结果与原图像之间的差值,它把闭运算“增加”的细节显现出来。
我们回顾下闭运算的作用:
那么黑帽运算的作用便是:
//博主微信/QQ 2487872782
//有问题可以联系博主交流
//有图像处理需求也可联系博主
//图像处理技术交流QQ群 271891601
//OpenCV版本:3.0
//VS版本:2013
#include
#include
#include
#include
using namespace cv;
int main()
{
//载入原图
Mat image = imread("F:/material/images/P0049-Top-Hat-02.jpg", 0);
//显示原图
imshow("顶帽-黑帽运算原图", image);
//获取结构
cv::Mat element1 = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(7, 7));
Mat out1,out2;
//进行形态学顶帽运算操作
morphologyEx(image, out1, MORPH_TOPHAT, element1);
//进行形态学黑帽运算操作
morphologyEx(image, out2, MORPH_BLACKHAT, element1);
//显示效果图
imshow("顶帽运算效果图", out1);
imshow("黑帽运算效果图", out2);
waitKey(0);
return 0;
}
参考原文链接:https://blog.csdn.net/wenhao_ir/article/details/124841757