OpenCV之图像轮廓检测及提取
2008-11-27 20:11
651 查看
代码功能:检测并画出图像中的轮廓
主要函数:cvFindContours、cvDrawContours
1 #include <cv.h>
2 #include <highgui.h>
3 #include <cxcore.h>
4 #include <iostream.h>
5
6 void main()
7 {
8 int i=0;
9 int mode=CV_RETR_CCOMP; //the mode of contours
10 int num_contours=0;
11 CvScalar ext_color,inn_color;
12
13 CvMemStorage*storage=cvCreateMemStorage(0);
14 CvSeq*contour=0;
15
16 IplImage*pimg=NULL;
17 IplImage*CTImg=NULL;
18 IplImage*src=cvLoadImage("test.bmp",-1);
19
20 pimg=cvCreateImage(cvGetSize(src),src->depth,1);
21 CTImg=cvCreateImage(cvGetSize(pimg),IPL_DEPTH_8U,3);
22 cvCvtColor(src,pimg,CV_BGR2GRAY);
23
24 cvNamedWindow("source",CV_WINDOW_AUTOSIZE);
25 cvNamedWindow("gray",CV_WINDOW_AUTOSIZE);
26 cvNamedWindow("contours",CV_WINDOW_AUTOSIZE);
27
28 cvShowImage("source",src);
29 //cvThreshold(pimg,pimg,200,250,CV_THRESH_BINARY);
30 cvErode(pimg,pimg,0,1);
31 cvDilate(pimg,pimg,0,1);
32 cvCanny(pimg,pimg,2,20,3);
33 //cvErode(pimg,pimg,0,2);
34 //cvDilate(pimg,pimg,0,1);
35 //Find the Contours
36 mode=CV_RETR_LIST;
37 num_contours=cvFindContours(pimg,storage,&contour,sizeof(CvContour),mode,CV_CHAIN_APPROX_NONE);
38 cout<<"The number of the contours is :"<<num_contours<<endl;
39 //Draw the Contours
40 for (;contour!=0;contour=contour->h_next)
41 {
42 inn_color=CV_RGB(rand()&255,rand()&255,rand()&255);
43 ext_color=CV_RGB(rand()&255,rand()&255,rand()&255);
44 cvDrawContours(CTImg,contour,ext_color,inn_color,1,2,8,cvPoint(0,0));
45 }
46
47 cvShowImage("gray",pimg);
48 cvShowImage("contours",CTImg);
49 cvWaitKey(0);
50 cvSaveImage("Contours.bmp",CTImg);
51 cvSaveImage("Canny.bmp",pimg);
52
53 cvReleaseImage(&pimg);
54 cvReleaseImage(&CTImg);
55 cvReleaseImage(&src);
56 cvReleaseMemStorage(&storage);
57
58 cvDestroyAllWindows();
59
60 }
效果图:
主要函数:cvFindContours、cvDrawContours
1 #include <cv.h>
2 #include <highgui.h>
3 #include <cxcore.h>
4 #include <iostream.h>
5
6 void main()
7 {
8 int i=0;
9 int mode=CV_RETR_CCOMP; //the mode of contours
10 int num_contours=0;
11 CvScalar ext_color,inn_color;
12
13 CvMemStorage*storage=cvCreateMemStorage(0);
14 CvSeq*contour=0;
15
16 IplImage*pimg=NULL;
17 IplImage*CTImg=NULL;
18 IplImage*src=cvLoadImage("test.bmp",-1);
19
20 pimg=cvCreateImage(cvGetSize(src),src->depth,1);
21 CTImg=cvCreateImage(cvGetSize(pimg),IPL_DEPTH_8U,3);
22 cvCvtColor(src,pimg,CV_BGR2GRAY);
23
24 cvNamedWindow("source",CV_WINDOW_AUTOSIZE);
25 cvNamedWindow("gray",CV_WINDOW_AUTOSIZE);
26 cvNamedWindow("contours",CV_WINDOW_AUTOSIZE);
27
28 cvShowImage("source",src);
29 //cvThreshold(pimg,pimg,200,250,CV_THRESH_BINARY);
30 cvErode(pimg,pimg,0,1);
31 cvDilate(pimg,pimg,0,1);
32 cvCanny(pimg,pimg,2,20,3);
33 //cvErode(pimg,pimg,0,2);
34 //cvDilate(pimg,pimg,0,1);
35 //Find the Contours
36 mode=CV_RETR_LIST;
37 num_contours=cvFindContours(pimg,storage,&contour,sizeof(CvContour),mode,CV_CHAIN_APPROX_NONE);
38 cout<<"The number of the contours is :"<<num_contours<<endl;
39 //Draw the Contours
40 for (;contour!=0;contour=contour->h_next)
41 {
42 inn_color=CV_RGB(rand()&255,rand()&255,rand()&255);
43 ext_color=CV_RGB(rand()&255,rand()&255,rand()&255);
44 cvDrawContours(CTImg,contour,ext_color,inn_color,1,2,8,cvPoint(0,0));
45 }
46
47 cvShowImage("gray",pimg);
48 cvShowImage("contours",CTImg);
49 cvWaitKey(0);
50 cvSaveImage("Contours.bmp",CTImg);
51 cvSaveImage("Canny.bmp",pimg);
52
53 cvReleaseImage(&pimg);
54 cvReleaseImage(&CTImg);
55 cvReleaseImage(&src);
56 cvReleaseMemStorage(&storage);
57
58 cvDestroyAllWindows();
59
60 }
效果图:
相关文章推荐
- 利用OpenCV提取图像的边缘,并将检测的边缘重新保存在一个新的文件中
- OpenCV检测图像轮廓
- 使用Opencv进行轮廓检测,字符提取,简单的直方图字符识别!
- opencv之图像轮廓提取
- opencv采集图像并进行轮廓检测
- opencv 提取轮廓大于某个阈值的图像
- OPENCV图像轮廓检测
- 利用OpenCV检测图像中的长方形画布或纸张并提取图像内容
- opencv结构分析与形状识别-轮廓检测和填充(连通区域-边缘与整个图像的目标)
- 初学 OpenCV 图像加载、输出+图像轮廓提取绘制并取出每个轮廓的坐标集合
- Python-OpenCV 处理图像(五):图像中边界和轮廓检测
- 【OpenCV学习】图像轮廓的提取和绘制
- 目标检测的图像特征提取之(四)OpenCV中BLOB特征提取与几何形状分类
- 图像处理--边沿检测与提取,轮廓跟踪
- opencv 实现对摄像头输入图像中文件及证件等的实时跟踪,四边形检测及提取
- python-opencv在有噪音的情况下提取图像的轮廓实例
- OpenCV学习——图像轮廓的提取和绘制
- OpenCV与EmguCV中的图像轮廓提取
- opencv--图像轮廓检测
- 利用OpenCV检测图像中的长方形画布或纸张并提取图像内容