【问题标题】:OpenCV- captured video runs faster than real time?OpenCV 捕获的视频比实时运行得更快?
【发布时间】:2012-01-04 16:29:45
【问题描述】:

我正在使用 openCV 从摄像头捕获视频并存储到 avi 文件,问题是当我完成捕获并运行 avi 文件时,视频流看起来快得尴尬...

这里是代码

int isColor = 1;
 int frameW  = 640;
 int frameH  = 480;
 int fps     = 25;

 CvCapture* capture = cvCaptureFromCAM(0);
 assert( capture != NULL );

 cvNamedWindow( "Webcam", CV_WINDOW_AUTOSIZE);

 CvVideoWriter *writer = cvCreateVideoWriter(
   "out.avi",
   CV_FOURCC('M','J','P','G'),
   fps,
   cvSize(frameW,frameH),
   isColor
  );

 IplImage* frame = cvQueryFrame( capture );

 while( (frame = cvQueryFrame( capture )) != NULL ) {
  cvWriteFrame(writer, frame);
  cvShowImage("Webcam", frame);
  char c = cvWaitKey( 33 );
  if ( c == 27 ) break;
 }

我不明白为什么当我在 Windows 7 32 位或 64 位和 Vs2008 和 OpenCV 2.3.1 上使用 cvGetCaptureProperty(CV_CAP_PROP_FPS) 时,这个函数总是返回 0,它是错误的,请帮助我,谢谢

【问题讨论】:

    标签: windows visual-studio-2008 visual-c++ opencv


    【解决方案1】:

    cvSetCaptureProperty 和 cvGetCaptureProperty 并不总是有效。另外,你试过 fps = 30 吗?

    还值得注意的是,您需要以与捕获 fps 相同的 fps 播放视频。

    【讨论】:

    • 如何修复视频流看起来快得尴尬,如果我尝试 fps = 30,它会运行得非常快,我只想让它像实时一样运行
    • 你试过fps=15和fps=60吗?有什么不同吗?
    • 是的,我明白了,我组合成功了,我使用命令行:ffmpeg.exe -i 1.wav -i 1.avi -acodec copy -vcodec copy output.avi 但它有一个问题是:合并后,当我播放视频时,音频和视频不同步,例如:视频播放前出现声音,如何同步音频和视频记录??
    • 我相信这将是一个 ffmpeg 问题,您可以就此发布一个单独的问题。
    • 我以为我们已经回答了您的问题,如果没有,您能否更新您的问题以反映您的要求?
    【解决方案2】:

    cvGetCaptureProperty 无法正常工作是一个已知问题,除非事先调用 cvQueryFrame。

    【讨论】:

    • 不,它仍然失败,这是我的代码:cvQueryFrame(camera);双xxx = cvGetCaptureProperty(相机,CV_CAP_PROP_FPS);
    猜你喜欢
    • 1970-01-01
    • 2021-07-03
    • 2018-07-30
    • 2016-01-09
    • 2015-05-27
    • 2018-04-29
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    相关资源
    最近更新 更多