我正在尝试存储网络摄像头拍摄的视频文件,这段代码有什么问题

时间:2014-02-14 13:50:36

标签: c++ opencv

#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 提前感谢

更正此代码

我正在尝试存储网络摄像头拍摄的视频文件此代码有什么问题

1 个答案:

答案 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;
}