【程序一】
主要功能:加载一个RGB彩色图像,将其转化成灰度图,并提取灰度图的边缘
主要函数说明:
<1> CVAPI(void) cvCvtColor( const CvArr* src, CvArr* dst, int code )
表示将图像src的颜色空间转换后保存到图像dst中,其中code表示颜色空间转化形式,主要有CV_BGR2BGRA、CV_BGRA2BGR、CV_BGR2RGBA、CV_RGBA2BGR、CV_BGR2RGB等60种颜色空间转换形式,本程序中code为:CV_RGB2GRAY。
<2> CVAPI(void) cvCanny( const CvArr* image, CvArr* edges, double threshold1,
double threshold2, int aperture_size CV_DEFAULT(3) );
表示将图像image中阈值为thresh1至thresh2间的轮廓提取出来,并将轮廓图像保存到edges中。
<3>另外在轮廓图像中添加了一个滑动条以控制阈值范围,查看不同阈值范围内的轮廓图像。
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*3, 3);
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
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
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处理
程序代码:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
运行结果:略
(注意视频文件的选取)