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 }