openCV图像形态学
1 #include <cv.h> 2 #include <highgui.h> 3 #include <stdio.h> 4 //平滑处理 5 6 int main() 7 { 8 IplImage* src = cvLoadImage("../pic.jpg"); 9 IplImage* dst = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,3); 10 IplImage* temp = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,3); 11 //cvErode(src,dst,NULL,5); //腐蚀:亮的区域被隔离且缩小 12 //cvDilate(src,dst,NULL,5); //膨胀:亮的区域得到扩展和连接 13 14 /*形态运算*/ 15 IplConvKernel* element = cvCreateStructuringElementEx(4,4,2,2,CV_SHAPE_RECT); 16 //cvMorphologyEx(src,dst,temp,element,CV_MOP_OPEN,1); //开运算:先腐蚀再膨胀,去除小的明亮区域,并且剩余的明亮区域被隔绝,但其大小不变 17 //cvMorphologyEx(src,dst,temp,element,CV_MOP_CLOSE,1); //闭运算:先膨胀再腐蚀,亮的区域连在一起,但他们基本的大小不变 18 //cvMorphologyEx(src,dst,temp,element,CV_MOP_GRADIENT,1);//梯度:膨胀-腐蚀,将边缘以高亮区域突出 19 //cvMorphologyEx(src,dst,temp,element,CV_MOP_TOPHAT,1); //“礼帽”:原 - 开运算,局部亮度极大点被分割出,突出比其周围更明亮的区域 20 cvMorphologyEx(src,dst,temp,element,CV_MOP_BLACKHAT,1); //“黑帽”:闭运算 - 原,黑色“洞”被分割出,突出比其周围的区域黑暗的区域 21 22 cvNamedWindow("形态",1); 23 24 cvShowImage("形态",dst); 25 26 27 while (1) 28 { 29 if(cvWaitKey(15) == 27) break; 30 31 } 32 cvReleaseImage(&dst); 33 cvDestroyAllWindows(); 34 }