• opencv中的图像形态学——腐蚀膨胀


      腐蚀膨胀是图像形态学比较常见的处理,腐蚀一般可以用来消除噪点,分割出独立的图像元素等。

      一般腐蚀操作对二值图进行处理,腐蚀操作如下图,中心位置的像素点是否与周围领域的像素点颜色一样(即是否是白色点,即值是否为255),若一致,则保留,不一致则该点变为黑色(值即为0)

      

      opencv中的腐蚀操作:

    CVAPI(void)  cvErode( const CvArr* src, CvArr* dst,
                          IplConvKernel* element CV_DEFAULT(NULL),
                          int iterations CV_DEFAULT(1) );

      前两个参数比较熟悉,第三个参数是用于传递模板的信息,默认是(NULL),即为3*3的模板,第四个参数是迭代的次数(即该腐蚀操作做几次)

      opencv中的膨胀操作其实就是腐蚀的反操作:

    CVAPI(void)  cvDilate( const CvArr* src, CvArr* dst,
                           IplConvKernel* element CV_DEFAULT(NULL),
                           int iterations CV_DEFAULT(1) );

      测试代码:

      

    #include "stdafx.h"
    #include "cv.h"
    #include "highgui.h"
    
    int main(){
        IplImage *img= cvLoadImage("C:/fu.jpg");//读取图片
        cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
        cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);
        cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);
    
        cvShowImage("Example1",img);//在Example1显示图片
        //    cvCopy(img,temp);
        IplImage* temp=cvCreateImage( //创建一个size为image,三通道8位的彩色图
            cvGetSize(img),
            IPL_DEPTH_8U,
            3
            );
    
        cvErode(img,temp,0,1);//腐蚀
        cvShowImage("Example2",temp);
    
        cvDilate(img,temp,0,1);//膨胀
        cvShowImage("Example3",temp);
    
    
        cvWaitKey(0);//暂停用于显示图片
    
    
        cvReleaseImage(&img);//释放img所指向的内存空间并且
        cvDestroyWindow("Example1");
        cvDestroyWindow("Example2");
        cvDestroyWindow("Example3");
        
        return 0;
    }
    View Code

      效果图:

      

      以上都是在模板3*3的情况下处理的,要是我们期望使用自己定义的模板时候,就需要自己做模板。

      

    CVAPI(IplConvKernel*)  cvCreateStructuringElementEx(
                int cols, int  rows, int  anchor_x, int  anchor_y,
                int shape, int* values CV_DEFAULT(NULL) );

    前两个参数是定义模板的大小,后两个参数是参考点的坐标(比如默认3*3模板的参考点坐标是2*2),第五个参数是模板的类型(可以是矩形,十字形,椭圆形,甚至是用户自己定义形状),最后一个参数是在使用自自定义形状的时候,通过value传递模板的形状。

    模板的类型:

    CVAPI(void)  cvReleaseStructuringElement( IplConvKernel** element ); //释放模板所占用的内存

    自定义5*5,参考点(3,3)的矩形模板的测试代码:

    #include "stdafx.h"
    #include "cv.h"
    #include "highgui.h"
    
    int main(){
        IplImage *img= cvLoadImage("C:/fu.jpg");//读取图片
        cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
        cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);
        cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);
    
        cvShowImage("Example1",img);//在Example1显示图片
        //    cvCopy(img,temp);
        IplImage* temp=cvCreateImage( //创建一个size为image,三通道8位的彩色图
            cvGetSize(img),
            IPL_DEPTH_8U,
            3
            );
    
        IplConvKernel * myModel;
        myModel=cvCreateStructuringElementEx( //自定义5*5,参考点(3,3)的矩形模板
            5,5,2,2,CV_SHAPE_RECT
            );
    
        cvErode(img,temp,myModel,1);
        cvShowImage("Example2",temp);
    
        cvDilate(img,temp,myModel,1);
        cvShowImage("Example3",temp);
    
    
        cvWaitKey(0);//暂停用于显示图片
    
        cvReleaseStructuringElement(&myModel);
        cvReleaseImage(&img);//释放img所指向的内存空间并且
        cvDestroyWindow("Example1");
        cvDestroyWindow("Example2");
        cvDestroyWindow("Example3");
        
        return 0;
    }
    View Code

    效果图:

    参考:学习opencv

  • 相关阅读:
    python的编码判断_unicode_gbk/gb2312_utf8(附函数)
    stat文件状态信息结构体
    内核配置中 ramdisk 大小修改
    mount命令详解
    dirent和DIR 结构体 表示文件夹中目录内容信息
    nandwrite 参数
    mke2fs 制作ext2文件系统image
    ext2文件系统错误
    照度/感光度(Lux)
    摄像机的几个重要的技术指标
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3528867.html
Copyright © 2020-2023  润新知