【程序一】 

主要功能:加载一个RGB彩色图像,将其转化成灰度图,并提取灰度图的边缘

主要函数说明:

<1> CVAPI(void) cvCvtColor( const CvArr* src, CvArr* dst, int code )

表示将图像src的颜色空间转换后保存到图像dst中,其中code表示颜色空间转化形式,主要有CV_BGR2BGRACV_BGRA2BGRCV_BGR2RGBACV_RGBA2BGRCV_BGR2RGB60种颜色空间转换形式,本程序中code为:CV_RGB2GRAY

<2> CVAPI(void) cvCanny( const CvArr* image, CvArr* edges, double threshold1,

                         double threshold2, int aperture_size CV_DEFAULT(3) );

       表示将图像image中阈值为thresh1thresh2间的轮廓提取出来,并将轮廓图像保存到edges中。

<3>另外在轮廓图像中添加了一个滑动条以控制阈值范围,查看不同阈值范围内的轮廓图像。

 1 #include <cv.h>
 2 #include <cxcore.h>
 3 #include <highgui.h>
 4 #include <iostream.h>
 5 
 6 //声明图像IplImage指针
 7 IplImage* pSrcImg=NULL;
 8 IplImage* pGrayImg = NULL; 
 9 IplImage* pCannyImg = NULL;
10 int Thresh=50;
11 
12 //滑动条响应函数
13 void onTrackerSlid(int thresh)
14 {
15     cvCanny(pGrayImg, pCannyImg,(float)thresh,(float)thresh*33);
16     cvShowImage( "Canny Image", pCannyImg );
17 }
18 int main( int argc, char** argv )
19 {
20   if(argc!=2)
21       argv[1]="lena.jpg";
22   //载入图像,强制转化为Gray
23   if((pSrcImg = cvLoadImage( argv[1],1)) != 0 )
24     {
25       cout<<"Press ESC to Quit"<<endl;
26       //将颜色空间由RGB转化为Gray
27       pGrayImg=cvCreateImage(cvGetSize(pSrcImg),8,1);
28       cvCvtColor(pSrcImg,pGrayImg,CV_RGB2GRAY);
29       //canny边缘检测
30       pCannyImg = cvCreateImage(cvGetSize(pGrayImg),IPL_DEPTH_8U,1);
31       //cvCanny(pGrayImg, pCannyImg, 150,50, 3);
32       //创建窗口
33       cvNamedWindow( "Source Image", CV_WINDOW_AUTOSIZE);
34       cvNamedWindow( "Gray Image",CV_WINDOW_AUTOSIZE);
35       cvNamedWindow( "Canny Image",CV_WINDOW_AUTOSIZE);
36       //添加滑动条来调节边缘检测的阈值
37       cvShowImage( "Gray Image", pCannyImg);
38       cvCreateTrackbar("Threshold""Canny Image"&Thresh, 100, onTrackerSlid);
39       onTrackerSlid(Thresh);      
40       //显示图像
41       cvShowImage( "Source Image", pSrcImg );
42       cvShowImage( "Gray Image",pGrayImg);
43       //保存图像
44       cvSaveImage( "Gray_Image.jpg",pGrayImg);
45       cvSaveImage( "Canny_Image.jpg",pCannyImg);
46       //等待按"ESC"键退出
47       while(1)
48           if(cvWaitKey(100)==27)
49               break
50       //销毁窗口
51       cvDestroyWindow( "Source Image" );
52       cvDestroyWindow( "Canny Image" );
53       cvDestroyWindow( "Gray Image");
54       //释放图像
55       cvReleaseImage( &pGrayImg ); 
56       cvReleaseImage( &pCannyImg ); 
57       cvReleaseImage( &pSrcImg);
58       
59       return 0;
60     } 
61   return -1;
62 }

运行结果:

 

                              原始图像                            灰度图像

Canny轮廓

【程序二】

主要功能:加载视频、获取视频中的某一帧、添加滑动条、图像的smooth处理

程序代码:

程序二代码:

运行结果:略

(注意视频文件的选取)

Posted on 2008-10-31 17:25  leivo  阅读(3997)  评论(1编辑  收藏  举报