【问题标题】:OpenCV captures only a fraction of the frames from a video fileOpenCV 仅从视频文件中捕获一小部分帧
【发布时间】:2015-04-19 04:47:49
【问题描述】:

我正在使用 OpenCV 对 AVI 文件进行一些处理。一切正常,除了原始视频中只有一小部分帧被捕获。

这是我的代码的摘录:

capture=cvCaptureFromAVI(PATH_TO_VIDEO);
int fps=(int) cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);
int frames=(int) cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);
qDebug("%d frames at %d fps",frames,fps);
int framesSaved=0;

while(1) {
    frame=cvQueryFrame(capture);
    if(!frame) break;

    framesSaved++;
    data = (uchar *)frame->imageData;
    //PROCESSING
    cvWriteFrame(writer,frame);
}

cvReleaseVideoWriter(&writer);
qDebug("VIDEO SAVED: %d frames",framesSaved);

输出:

1948 frames at 50 fps
VIDEO SAVED: 105 frames

知道可能是什么问题吗?

谢谢

【问题讨论】:

  • 解码下一帧时也可能出现不同的错误。来自 cvQueryFrame 的NULL 不一定意味着 EOF。可能文件已损坏/不完整。

标签: opencv


【解决方案1】:

众所周知,OpenCV VideoCapture 在使用CV_CAP_PROP_FRAME_COUNT 报告正确的帧数时存在严重问题

好消息是,OpenCV 的人正在努力为下一个版本修复它。

【讨论】:

  • 这种情况下帧数是正确的。视频输入视频的长度约为 20 秒。
  • OpenCV 读取更少帧的机会非常非常低。读错数字的机会非常高。您可以使用其他视频捕获后端 - Windows Media 或 Quick time 对其进行测试,以查看帧数是否不同。
  • 此“OpenCV 会议记录”链接出现 404 错误
  • 从 OpenCV 2.4.9 开始,这仍然没有修复。
  • OpenCV 3.0.0 怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
相关资源
最近更新 更多