您的位置:首页 > 其它

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

2017-09-16 20:15 483 查看
本系列文章的部分文字叙述转载@浅墨_毛星云 出品。

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

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


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

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

膨胀的原图与效果图:





腐蚀的原图与效果图:





一,膨胀

此图膨胀的目的是去除白色短袖上面的污渍。
膨胀的代码如下:

//-----------------------------------【头文件包含部分】---------------------------------------  

//     描述:包含程序所依赖的头文件  

//----------------------------------------------------------------------------------------------  

#include <opencv2/core/core.hpp>  

#include<opencv2/highgui/highgui.hpp>  

#include<opencv2/imgproc/imgproc.hpp>  

#include <iostream>  

   

//-----------------------------------【命名空间声明部分】---------------------------------------  

//     描述:包含程序所使用的命名空间  

//-----------------------------------------------------------------------------------------------   

using namespace std;  

using namespace cv;  

   

//-----------------------------------【main( )函数】--------------------------------------------  

//     描述:控制台应用程序的入口函数,我们的程序从这里开始  

//-----------------------------------------------------------------------------------------------  

int main(  )  

{  

   

       //载入原图   

       Mat image = imread("1.jpg");  

   

       //创建窗口   

       namedWindow("【原图】膨胀操作");  

       namedWindow("【效果图】膨胀操作");  

   

       //显示原图  

       imshow("【原图】膨胀操作", image);  

   

       //获取自定义核  

       Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));  

       Mat out;  

       //进行膨胀操作  

       dilate(image, out, element, Point(-1, -1),
iterations = 6,
borderType = BORDER_CONSTANT); //iterations=6,6是表示膨胀的次数,表示操作进行了6次膨胀

   

       //显示效果图  

       imshow("【效果图】膨胀操作", out);  

   

       waitKey(0);  

   

       return 0;  

}  

膨胀的效果图见于上图。

(二)腐蚀

//-----------------------------------【头文件包含部分】---------------------------------------  

//     描述:包含程序所依赖的头文件  

//----------------------------------------------------------------------------------------------  

#include <opencv2/core/core.hpp>  

#include<opencv2/highgui/highgui.hpp>  

#include<opencv2/imgproc/imgproc.hpp>  

#include <iostream>  

   

//-----------------------------------【命名空间声明部分】---------------------------------------  

//     描述:包含程序所使用的命名空间  

//-----------------------------------------------------------------------------------------------   

using namespace std;  

using namespace cv;  

   

//-----------------------------------【main( )函数】--------------------------------------------  

//     描述:控制台应用程序的入口函数,我们的程序从这里开始  

//-----------------------------------------------------------------------------------------------  

int main(  )  

{  

       //载入原图   

       Matimage = imread("1.jpg");  

   

        //创建窗口   

       namedWindow("【原图】腐蚀操作");  

       namedWindow("【效果图】腐蚀操作");  

   

       //显示原图  

       imshow("【原图】腐蚀操作", image);  

   

          

//获取自定义核  

       Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));  

       Mat out;  

   

//进行腐蚀操作  

  erode(image, out, element, Point(-1, -1),
iterations = 6,
borderType = BORDER_CONSTANT); //此操作共进行了6次腐蚀 

   

       //显示效果图  

       imshow("【效果图】腐蚀操作", out);  

   

       waitKey(0);  

   

       return 0;  

}  

腐蚀的效果图见于上图。









































































内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: