• opencv中的更通用的形态学


      为了处理更为复杂的情况,opencv中还支持更多的形态学变换。

    形态学名称 操作过程 操作名称 是否需要temp参数
    开操作 open open(src)=先腐蚀,后膨胀  CV_MOP_OPEN
    闭操作 close close(src)=先膨胀,后腐蚀  CV_MOP_CLOSE
    形态梯度 gradient gradient(src)=dilate(scr)-erode(src)  CV_MOP_GRADIENT 总是
    “礼帽” topHat topHat(src)=src-open(src)  CV_MOP_TOPHAT src=dst的时候需要
    “黑帽”blackHat blackHat(src)=close(src)-src  CV_MOP_BLACKHAT src=dst的时候需要

      调用的函数:

    CVAPI(void)  cvMorphologyEx( const CvArr* src, CvArr* dst,
                                 CvArr* temp, IplConvKernel* element,
                                 int operation, int iterations CV_DEFAULT(1) );

      前两个函数前面讲过了,注意到这里多了个temp的参数,因为图形变换的时候是需要临时变量的,使用该数组时,应该与原数组大小相同。(但这里有点纳闷的是,为毛处理代码不自己生成个临时变量,需要用户自己传入temp,这里就有些不懂= =),第四个介绍过了,是自定义的模板,第五个是传入上面表格中的操作名称,这样就会做相应的操作,最后一个也是前面介绍过的迭代次数。

      测试代码:

      

    #include "stdafx.h"
    #include "cv.h"
    #include "highgui.h"
    
    int main(){
        IplImage *img= cvLoadImage("C:/CIR.jpg");//读取图片
        cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
        cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);
        cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);
        cvNamedWindow("Example4",CV_WINDOW_AUTOSIZE);
        cvNamedWindow("Example5",CV_WINDOW_AUTOSIZE);
        cvNamedWindow("Example6",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);
        cvMorphologyEx(
            img,temp,temp,0,CV_MOP_OPEN,1
            );
        cvShowImage("Example2",temp);
            
        cvMorphologyEx(
            img,temp,temp,0,CV_MOP_CLOSE,1
            );
        cvShowImage("Example3",temp);
    
        cvMorphologyEx(
            img,temp,temp,0,CV_MOP_GRADIENT,1
            );
        cvShowImage("Example4",temp);
    
        cvMorphologyEx(
            img,temp,temp,0,CV_MOP_TOPHAT,1
            );
        cvShowImage("Example5",temp);
    
        cvMorphologyEx(
            img,temp,temp,0,CV_MOP_BLACKHAT,1
            );
        cvShowImage("Example6",temp);
        cvWaitKey(0);//暂停用于显示图片
    
        //cvReleaseStructuringElement(&myModel);
        cvReleaseImage(&img);//释放img所指向的内存空间并且
        cvDestroyWindow("Example1");
        cvDestroyWindow("Example2");
        cvDestroyWindow("Example3");
        cvDestroyWindow("Example4");
        cvDestroyWindow("Example5");
        cvDestroyWindow("Example6");
        return 0;
    }
    View Code

      测试结果:

      

       

     参考:学习opencv

  • 相关阅读:
    数据库——事务
    数据库——连接池
    JDBC——使用jdbc操作时,如何提取数据的性能
    2019-06-26 The Eclipse executable launcher was unable to locate its companion launcher
    2019-06-24在windows下如何查看80端口占用情况?是被哪个进程占用
    2019-06-19_解决ActiveMQ访问出现503的错误
    2019-06-17 tomcat启动;zookeeper启动批处理
    2019-06-13记忆 长命令
    2019-06-13linux的vi编辑器中如何查找关键字
    2019-06-13-vim配色步骤
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3528992.html
Copyright © 2020-2023  润新知