Posted on 2013-01-16 11:18
盛勝 閱讀(9934)
評論(4) 編輯 收藏 引用
網上很多都說錄制了之后視頻文件為0k,或者是打不開。
其實,這個原因主要與2方面有關:
1. OpenCV生成的視頻的編碼格式有關。
2. 非法退出錄取有關(我用200次循環解決。或者可以用Timer。或者用其他鍵處理)
vs2008 win32控制臺程序

1 #include "cv.h"
2 #include "cxcore.h"
3 #include "highgui.h"
4 #include <iostream>
5
6 using namespace std;
7 int main()
8 {
9 CvCapture* capture=cvCaptureFromCAM(-1);
10 CvVideoWriter* video=NULL;
11 IplImage* frame=NULL;
12 int n;
13 if(!capture) //如果不能打開攝像頭給出警告
14 {
15 cout<<"Can not open the camera."<<endl;
16 return -1;
17 }
18 else
19 {
20 frame=cvQueryFrame(capture); //首先取得攝像頭中的一幀
21 video=cvCreateVideoWriter("camera.avi", CV_FOURCC('X', 'V', 'I', 'D'), 25,
22 cvSize(frame->width,frame->height)); //創建CvVideoWriter對象并分配空間
23 //保存的文件名為camera.avi,編碼要在運行程序時選擇,大小就是攝像頭視頻的大小,幀頻率是32
24 if(video) //如果能創建CvVideoWriter對象則表明成功
25 {
26 cout<<"VideoWriter has created."<<endl;
27 }
28
29 cvNamedWindow("Camera Video",1); //新建一個窗口
30 int i = 0;
31 while(i <= 200) // 讓它循環200次自動停止錄取
32 {
33 frame=cvQueryFrame(capture); //從CvCapture中獲得一幀
34 if(!frame)
35 {
36 cout<<"Can not get frame from the capture."<<endl;
37 break;
38 }
39 n=cvWriteFrame(video,frame); //判斷是否寫入成功,如果返回的是1,表示寫入成功
40 cout<<n<<endl;
41 cvShowImage("Camera Video",frame); //顯示視頻內容的圖片
42 i++;
43 if(cvWaitKey(2)>0)
44 break; //有其他鍵盤響應,則退出
45 }
46
47 cvReleaseVideoWriter(&video);
48 cvReleaseCapture(&capture);
49 cvDestroyWindow("Camera Video");
50 }
51 return 0;
52 }