您的位置:首页 > 运维架构

两个简单的OpenCV程序

2008-10-31 17:25 363 查看
【程序一】

主要功能:加载一个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>另外在轮廓图像中添加了一个滑动条以控制阈值范围,查看不同阈值范围内的轮廓图像。

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*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"<<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 }
运行结果:

程序二代码:

#include <cv.h>

#include <highgui.h>

#include <iostream.h>

#pragma comment(lib,"cv.lib")

#pragma comment(lib,"highgui.lib");

int g_Pos=5;

CvCapture *g_Cap=NULL;

IplImage*frame=NULL;

void ImgProcess(IplImage*img)

{

cvNamedWindow("Image_In_Wnd");

cvNamedWindow("Image_Out_Wnd");

IplImage*out=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);

cvShowImage("Image_In_Wnd",img);

cvSmooth(img,out,CV_GAUSSIAN,3,3);

cvShowImage("Image_Out_Wnd",out);

cvWaitKey(0);

cvDestroyWindow("Image_In_Wnd");

cvDestroyWindow("Image_Out_Wnd");

cvReleaseImage(&out);

}

void onTrackerSlide(int pos)

{

cvSetCaptureProperty(g_Cap,CV_CAP_PROP_POS_FRAMES,pos);

}

int main(int argc,char **argv)

{

cvNamedWindow("Test",CV_WINDOW_AUTOSIZE);

if(argc<=2)

argv[1]="test.avi";

g_Cap=cvCreateFileCapture(argv[1]);

int Frames=(int)cvGetCaptureProperty(g_Cap,CV_CAP_PROP_FRAME_COUNT);

if(Frames!=0)

cvCreateTrackbar("Frame Position:","Test",&g_Pos,Frames,onTrackerSlide);

while(1)

{

frame=cvQueryFrame(g_Cap);

if(frame!=NULL)

cvShowImage("Test",frame);

char c=cvWaitKey(100);

if(c==27)

break;

}

ImgProcess(frame);

cvDestroyWindow("Test");

cvReleaseImage(&frame);

return 0;

}
运行结果:略

(注意视频文件的选取)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: