OpenCV图像处理形态学操作Erode与Dilate

Home / C++ MrLee 2017-2-14 4634

通俗的说:
膨胀算法使图像扩大一圈。 腐蚀算法使二值图像减小一圈。
腐蚀:删除对象边界的某些像素 膨胀:给图像中的对象边界添加像素
算法: 从图像处理角度看,二值图像的腐蚀和膨胀就是将一个小型二值图(结构元素,一般为3*3大小)在一个大的二值图上逐点移动并进行比较,根据比较的结果作出相应处理而已。
膨胀算法:用3X3的结构元素,扫描二值图像的每一个像素,用结构元素与其覆盖的二值图像做“与”运算,如果都为0,结构图像的该像素为0,否则为1.结果:使二值图像扩大一圈。
腐蚀算法:用3X3的结构元素,扫描二值图像的每一个像素,用结构元素与其覆盖的二值图像做“与”运算,如果都为1,结构图像的该像素为1,否则为0.结果:使二值图像减小一圈。
注意:
OpenCV里面的腐蚀膨胀都是针对 白色 目标区域的。
说,膨胀使图像 变大一圈, 那是指 图像中的 白色目标区域 扩大了一圈~~~~~~腐蚀,亦然。
====================================
代码:
#include <stdio.h>  
#include <cv.h>  
#include <highgui.h>  
#include <cvaux.h> //必须引此头文件  

#pragma comment(lib, "cv.lib")  
#pragma comment(lib, "cxcore.lib")  
#pragma comment(lib, "highgui.lib")  
int main( int argc, char** argv )  
{   
    IplImage *img = cvLoadImage("rice.png",0);  
    if(img == NULL)  
    {  
        printf("img load failed!\n");  
        return 0;  
    }  
    IplImage *img_erode = cvCreateImage(cvGetSize(img), 8, 1);  
    IplImage *img_dilate = cvCreateImage(cvGetSize(img), 8, 1);  
  
    cvErode( img,img_erode, NULL,1); //腐蚀  
    cvDilate( img,img_dilate, NULL,1); //膨胀  
  
    cvNamedWindow("img_erode");  
    cvNamedWindow("img_dilate");  
  
    cvShowImage("img_erode",img_erode);  
    cvShowImage("img_dilate",img_dilate);  
  
    cvWaitKey(-1);  
  
  
    cvReleaseImage(&img_dilate);  
    cvReleaseImage(&img_erode);  
  
    cvDestroyAllWindows();  
  
  
    return 0;  
}  

图示:

本文链接:https://www.it72.com/11816.htm

推荐阅读
最新回复 (0)
返回