首页 > 其他 > 详细

图像的形态学处理

时间:2014-04-27 00:03:14      阅读:700      评论:0      收藏:0      [点我收藏+]
数学形态运算中,最常见的基本运算有七种, 分别为:腐蚀、膨胀、开运算、闭运算、击中、细化和粗化, 它们是全部形态学的基础。腐蚀和膨胀,看上去好像是一对互逆的操作,实际上,这两种操作不具有互逆的关系。 开运算和闭运算正是依据腐蚀和膨胀的不可逆性,演变而来的。先腐蚀后膨胀的过程就称为开运算。 闭运算是通过对腐蚀和膨胀的另一种不同次序的执行而得到的, 闭运算是先膨胀后腐蚀的过程,其功能是用来填充物体内细小空洞、连接邻近物体、平滑其边界, 同时不明显改变不明显改变其面积。 参考代码如下所示:

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;  
}  

输出结果:

bubuko.com,布布扣bubuko.com,布布扣

bubuko.com,布布扣bubuko.com,布布扣


关于Computer Vision更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.


图像的形态学处理,布布扣,bubuko.com

图像的形态学处理

原文:http://blog.csdn.net/songzitea/article/details/24555995

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!