OpenCV学习之三:使用形态学操作获取图像边缘
时间:2011-01-04 来源:pixels
得到了图像的边缘,下图为示例结果:
源代码如下:

2
3 #include "cv.h"
4 #include "cxcore.h"
5 #include "highgui.h"
6
7 #pragma comment(lib, "cv.lib")
8 #pragma comment(lib, "cxcore.lib")
9 #pragma comment(lib, "highgui.lib")
10
11 int _tmain(int argc, _TCHAR* argv[])
12 {
13 IplImage *srcImg = cvLoadImage("D:\\luosi.jpg", 1);
14 IplImage *grayImg = cvCreateImage(cvGetSize(srcImg), 8, 1);
15 cvCvtColor(srcImg, grayImg, CV_BGR2GRAY);
16
17 IplImage *dstImg = cvCreateImage(cvGetSize(srcImg), 8, 1);
18 cvThreshold(grayImg, dstImg, cvMean(srcImg)*0.7, 255, CV_THRESH_BINARY);
19
20 IplConvKernel *kernel = cvCreateStructuringElementEx(3, 3, 1, 1, CV_SHAPE_CROSS);
21
22 cvMorphologyEx(dstImg, dstImg, NULL, kernel, CV_MOP_OPEN, 3);
23 cvMorphologyEx(dstImg, dstImg, NULL, kernel, CV_MOP_CLOSE, 1);
24
25 // Find edges: dilate(image) - image;
26 IplImage *dilatedImg = cvCreateImage(cvGetSize(srcImg), 8, 1);
27 cvDilate(dstImg, dilatedImg, kernel, 1);
28 cvSub(dilatedImg, dstImg, dstImg);
29
30 // Label edges in srcImg
31 IplImage *redCh = cvCreateImage(cvGetSize(srcImg), 8, 1);
32 IplImage *greenCh = cvCreateImage(cvGetSize(srcImg), 8, 1);
33 IplImage *blueCh = cvCreateImage(cvGetSize(srcImg), 8, 1);
34
35 cvSplit(srcImg, blueCh, greenCh, redCh, NULL);
36 cvOr(redCh, dstImg, redCh);
37 cvMerge(blueCh, greenCh, redCh, NULL, srcImg);
38
39 cvNamedWindow("src");
40 cvShowImage("src", srcImg);
41 cvNamedWindow("dst");
42 cvShowImage("dst", dstImg);
43
44 cvWaitKey(0);
45
46 return 0;
47 }
48
49
相关阅读 更多 +
排行榜 更多 +