形态学处理(一)膨胀(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. }  

腐蚀的效果图见于上图。















扫描二维码关注公众号,回复: 1836414 查看本文章



































猜你喜欢

转载自blog.csdn.net/qq_39689802/article/details/78006173