#include <cv.h>
#include <opencv/cv.hpp>
#include <opencv2/opencv.hpp>
#include <cvaux.h>
#include <cxcore.h>
#include <stdio.h>
#include <highgui.h>
#include <stdlib.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc,char** argv)
{
int c;
CvVideoWriter *writer ;
IplImage* img;
writer=cvCreateVideoWriter("/home/vaibhav/out.avi",-1,5,cvSize(640,480),1);
CvCapture* cv_cap = cvCaptureFromCAM(0);
cvNamedWindow("Video",0); // create window
for(c=0;c<1;c++) {
img = cvQueryFrame(cv_cap); // get frame
if(img != 0)
{ cvShowImage("Video", img); // show frame
cvWriteFrame(writer, img);
cvWaitKey(1); // wait 10 ms or for key stroke
}
}
/* clean up */
cvReleaseVideoWriter( &writer );
cvReleaseCapture( &cv_cap );
cvDestroyWindow("Video");
}
请帮助我,我正在使用eclipse和ubuntu 提前感谢
更正此代码我正在尝试存储网络摄像头拍摄的视频文件此代码有什么问题
答案 0 :(得分:1)
替换
for(c=0;c<1;c++)
与
while(1)
问题是您只能访问视频文件中的第一帧,通过“c&lt; 1”限制它,所以请尝试上面的替换,如果您认为它适合您的情况。
如果仍然无法运行代码,那么最好切换到opencv的C ++ api。我只是在opencv2 api中给出一个示例代码,试试这个,它必须为你运行。
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
VideoCapture cap(0);
VideoWriter writer("video.avi", CV_FOURCC('M', 'J', 'P', 'G'), 24,cvSize(640,480),1);
Mat frame;
namedWindow("video",1);
while(1)
{
cap.read(frame);
writer.write(frame);
imshow("video",frame);
waitKey(33);
}
return 0;
}