形态学处理(一)膨胀(dilate)与腐蚀(erode)

本系列文章的部分文字叙述转载@浅墨_毛星云 出品。

膨胀与腐蚀概念问题借鉴于下面的百度云链接:

链接: http://pan.baidu.com/s/1i37nXSL 密码: 3xnd

腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。膨胀就是图像中的高亮部分进行膨胀,“领域扩张”,效果图拥有比原图更大的高亮区域。腐蚀就是原图中的高亮部分被腐蚀,“领域被蚕食”,效果图拥有比原图更小的高亮区域。

在进行讲解膨胀腐蚀之前先看下原图和进行膨胀腐蚀之后的效果图。

膨胀的原图与效果图:

腐蚀的原图与效果图:

一,膨胀

此图膨胀的目的是去除白色短袖上面的污渍。
膨胀的代码如下:
  1. //-----------------------------------【头文件包含部分】---------------------------------------  
  2. //     描述:包含程序所依赖的头文件  
  3. //----------------------------------------------------------------------------------------------  
  4. #include <opencv2/core/core.hpp>  
  5. #include<opencv2/highgui/highgui.hpp>  
  6. #include<opencv2/imgproc/imgproc.hpp>  
  7. #include <iostream>  
  8.    
  9. //-----------------------------------【命名空间声明部分】---------------------------------------  
  10. //     描述:包含程序所使用的命名空间  
  11. //-----------------------------------------------------------------------------------------------   
  12. using namespace std;  
  13. using namespace cv;  
  14.    
  15. //-----------------------------------【main( )函数】--------------------------------------------  
  16. //     描述:控制台应用程序的入口函数,我们的程序从这里开始  
  17. //-----------------------------------------------------------------------------------------------  
  18. int main(  )  
  19. {  
  20.    
  21.        //载入原图   
  22.        Mat image = imread("1.jpg");  
  23.    
  24.        //创建窗口   
  25.        namedWindow("【原图】膨胀操作");  
  26.        namedWindow("【效果图】膨胀操作");  
  27.    
  28.        //显示原图  
  29.        imshow("【原图】膨胀操作", image);  
  30.    
  31.        //获取自定义核  
  32.        Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));  
  33.        Mat out;  
  34.        //进行膨胀操作  
  35.        dilate(image, out, element, Point(-1, -1),
    iterations = 6,
    borderType = BORDER_CONSTANT); //iterations=6,6是表示膨胀的次数,表示操作进行了6次膨胀
  36.    
  37.        //显示效果图  
  38.        imshow("【效果图】膨胀操作", out);  
  39.    
  40.        waitKey(0);  
  41.    
  42.        return 0;  
  43. }  
膨胀的效果图见于上图。

(二)腐蚀

  1. //-----------------------------------【头文件包含部分】---------------------------------------  
  2. //     描述:包含程序所依赖的头文件  
  3. //----------------------------------------------------------------------------------------------  
  4. #include <opencv2/core/core.hpp>  
  5. #include<opencv2/highgui/highgui.hpp>  
  6. #include<opencv2/imgproc/imgproc.hpp>  
  7. #include <iostream>  
  8.    
  9. //-----------------------------------【命名空间声明部分】---------------------------------------  
  10. //     描述:包含程序所使用的命名空间  
  11. //-----------------------------------------------------------------------------------------------   
  12. using namespace std;  
  13. using namespace cv;  
  14.    
  15. //-----------------------------------【main( )函数】--------------------------------------------  
  16. //     描述:控制台应用程序的入口函数,我们的程序从这里开始  
  17. //-----------------------------------------------------------------------------------------------  
  18. int main(  )  
  19. {  
  20.        //载入原图   
  21.        Matimage = imread("1.jpg");  
  22.    
  23.         //创建窗口   
  24.        namedWindow("【原图】腐蚀操作");  
  25.        namedWindow("【效果图】腐蚀操作");  
  26.    
  27.        //显示原图  
  28.        imshow("【原图】腐蚀操作", image);  
  29.    
  30.           
  31. //获取自定义核  
  32.        Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));  
  33.        Mat out;  
  34.    
  35. //进行腐蚀操作  
  36.   erode(image, out, element, Point(-1, -1),
    iterations = 6,
    borderType = BORDER_CONSTANT); //此操作共进行了6次腐蚀 
  37.    
  38.        //显示效果图  
  39.        imshow("【效果图】腐蚀操作", out);  
  40.    
  41.        waitKey(0);  
  42.    
  43.        return 0;  
  44. }  

腐蚀的效果图见于上图。

















































  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个开源计算机视觉库,可以进行图像处理、图像分析和机器视觉等方面的开发。其中,图像形态学处理是OpenCV中的一种基本图像处理技术,主要用于图像的形态学分析和形态学变换。 图像形态学处理主要包括以下几个基本操作: 1. 腐蚀(Erosion):将图像中的物体边界向内侵蚀,可以去除细小的噪点和连接物体之间的小桥梁。 2. 膨胀(Dilation):将图像中的物体边界向外膨胀,可以填充物体内的空洞和连接相邻物体。 3. 开运算(Opening):先对图像进行腐蚀操作,再对腐蚀后的图像进行膨胀操作,可以去除细小的物体和连接物体之间的小桥梁。 4. 闭运算(Closing):先对图像进行膨胀操作,再对膨胀后的图像进行腐蚀操作,可以填充物体内的空洞和连接相邻物体。 5. 梯度(Gradient):通过对图像进行膨胀腐蚀操作,可以得到物体的边缘信息。 6. 礼帽(Top Hat):通过对原图像和开运算后的图像进行相减操作,可以得到原图像中小物体和较暗的区域信息。 7. 黑帽(Black Hat):通过对原图像和闭运算后的图像进行相减操作,可以得到原图像中小物体和较亮的区域信息。 这些操作可以通过OpenCV中的函数进行实现,例如: cv2.erode():进行腐蚀操作 cv2.dilate():进行膨胀操作 cv2.morphologyEx():进行开闭运算、梯度、礼帽和黑帽操作 在实际应用中,图像形态学处理常用于图像分割、形状分析、边缘检测、物体识别等方面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值