形态学滤波理论于上世纪90年代提出,被用于分析及处理离散图像。它定义了一系列的运算,应用预定义的形状元素来变换一张图像。
一:图像腐蚀、膨胀和开闭运算
图像的腐蚀:替换为当前像素位像素集合中的最小像素值<在结构元素的几何中>,函数为erode
图像的膨胀:替换为当前像素位像素集合中的最大像素值,函数为dilate
图像的开运算:先腐蚀后膨胀,函数为morphologyEx,对应的参数为MORPH_CLOSE
图像的闭运算:先膨胀后腐蚀,函数为morphologyEx,对应的参数为MORPH_OPEN
Code:
Mat image = imread("F:\\lena.png", 0);
/*腐蚀运算 替换为当前像素位像素集合中的最小像素值*/
Mat eroded;
erode(image, eroded, Mat());
/*膨胀运算 替换为当前像素位像素集合中的最大像素值*/
Mat dilated;
dilate(image, dilated, Mat());
/*闭运算 先膨胀后腐蚀
开运算 先腐蚀后膨胀
*/
Mat closed;
Mat element(5, 5, CV_8U, Scalar(1));
morphologyEx(image, closed, MORPH_CLOSE, element);
Result:
膨胀:
文章图片
腐蚀:
文章图片
二:利用形态学滤波进行边缘检测
思想:形态学滤波利用梯度进行边缘检测原理就是计算膨胀后的图像和腐蚀后的图像的差值,由于两个变换后的图像不同之处主要在边缘处,图像边缘将通过求差得到强化。函数为morphologyEx,参数为MORPH_GRADIENT。
此外后面可以用sobel算子<方向滤波器>,拉普拉斯变换<二阶导数滤波器>和Canny算子对图像进行边缘检测。
Code:
Mat result;
/* 形态学滤波利用梯度进行边缘检测原理就是计算膨胀后的图像和腐蚀后的图像的差值,
由于两个变换后的图像不同之处主要在边缘处,图像边缘将通过求差得到强化。
还可以利用图像形态学滤波对图像进行角点检测。。
*/
morphologyEx(image, result, MORPH_GRADIENT, Mat());
threshold(result, result, 50, 255, THRESH_BINARY);
【Opencv2系列学习笔记7(图像形态学运算)】
Result:
文章图片
三:形态学运算的其它应用
利用图像的形态学运算还可以对图像进行角点检测,当然效果肯定不如之前的Harris等算子的角点检测,故不作介绍。此外还可以通过利用分水岭算法对图像进行分割以及用GrabCut算法提取前景物体。后面如有用到,会详细介绍,这里粗略笔记。。。
推荐阅读
- OpenCV学习之Canny算法边缘检测(可调阈值)
- #|OpenCV学习笔记-MeanShift
- vs2013中将OpenCV程序由x64转化为x86
- OpenCV学习笔记|学习opencv之(六)-图像切割,使用ROI
- OpenCV学习笔记|OpenCV学习笔记09--通过cvPtr2D或指针算法绘制图形
- 【OpenCV学习笔记】十九、图像边缘检测
- 【OpenCV学习笔记】二十一、直方图计算及绘制(一)
- opencv学习笔记|opencv4学习笔记(2)-canny边缘检测
- opencv学习笔记|opencv学习笔记(1)-阈值分割3种方法,以及相关参数调试心得