zoukankan      html  css  js  c++  java
  • 图像的形态学处理

    数学形态运算中。最常见的基本运算有七种, 分别为:腐蚀、膨胀、开运算、闭运算、击中、细化和粗化。 它们是所有形态学的基础。腐蚀和膨胀。看上去好像是一对互逆的操作,实际上,这两种操作不具有互逆的关系

    开运算和闭运算正是根据腐蚀和膨胀的不可逆性。演变而来的。先腐蚀后膨胀的过程就称为开运算。 闭运算是通过对腐蚀和膨胀的还有一种不同次序的运行而得到的, 闭运算是先膨胀后腐蚀的过程,其功能是用来填充物体内细小空洞、连接邻近物体、平滑其边界, 同一时候不明显改变不明显改变其面积。 參考代码例如以下所看到的:

    IplImage *src=0;  
    IplImage *dst=0;  
    IplConvKernel *element=0; 
    int element_shape=CV_SHAPE_CROSS; 
    int max_iters=20;  
    int open_close_pos=0;  
    int erode_dilate_pos=0; 
    
    void ImageOpenClose(int pos)  {  
        int n=open_close_pos-max_iters;  
        int an=n>0?

    n:-n; element = cvCreateStructuringElementEx(an*2+1,an*2+1,an,an,element_shape,0);//创建结构元素 if (n<0) { cvErode(src,dst,element,1);//腐蚀图像 cvDilate(dst,dst,element,1);//膨胀图像 } else { cvDilate(dst,dst,element,1);//膨胀图像 cvErode(src,dst,element,1);//腐蚀图像 } cvReleaseStructuringElement(&element); cvShowImage("Open/Close",dst); } void ImageErodeDilate(int pos){ int n=erode_dilate_pos-max_iters; int an=n>0?

    n:-n; element = cvCreateStructuringElementEx(an*2+1,an*2+1,an,an,element_shape,0); if (n<0){ cvErode(src,dst,element,1); } else { cvDilate(src,dst,element,1); } cvReleaseStructuringElement(&element); cvShowImage("Erode/Dilate",dst); }

    測试主程序

    int _tmain(int argc, _TCHAR* argv[]){  
        char *filename ="Tulips.jpg";     
        if( (src = cvLoadImage(filename,1)) == 0 )  
            return -1;  
        dst=cvCloneImage(src);  
        cvNamedWindow("Open/Close",1);  
        cvNamedWindow("Erode/Dilate",1);  
        open_close_pos = erode_dilate_pos = max_iters;  
        cvCreateTrackbar("iterations","Open/Close",&open_close_pos,max_iters*2+1,ImageOpenClose);  
        cvCreateTrackbar("iterations","Erode/Dilate",&erode_dilate_pos,max_iters*2+1,ImageErodeDilate);
    	
    	for (;;)  {  
            int c;  
            ImageOpenClose(open_close_pos);  
            ImageErodeDilate(erode_dilate_pos);  
            c= cvWaitKey(0);  
            if (c==27) {  
                break;  
            }  
            switch(c) {  
            case 'e':  
                element_shape=CV_SHAPE_ELLIPSE;  
                break;  
            case 'r':  
                element_shape=CV_SHAPE_RECT;  
                break;  
            case '/r':  
                element_shape=(element_shape+1)%3;  
                break;  
            default:  
                break;  
            }  
        }  
        cvReleaseImage(&src);  
        cvReleaseImage(&dst);  
         
        cvDestroyWindow("Open/Close");  
        cvDestroyWindow("Erode/Dilate");  
        return 0;  
    }  

    输出结果:


    关于Computer Vision很多其它讨论与交流。敬请关注本博客和新浪微博songzi_tea.


  • 相关阅读:
    手机京东页面页面主体和头部搜索
    《转》冯森林:手机淘宝中的那些Web技术(2014年)
    轮播图片如何随着窗口的大小改变而改变
    移动WEB开发基础入门
    MVC的项目部署成应用程序或虚拟目录路径的问题
    jqgrid传入的json数据,赋值了但是没有在表格上显示
    在JavaScript中对HTML进行反转义
    Node.js 创建第一个应用
    Node.js 安装配置
    对ASP.NET程序员非常有用的85个工具
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7118616.html
Copyright © 2011-2022 走看看