OpenCV VideoCapture无法打开许多视频文件

时间:2012-04-19 07:48:11

标签: c++ opencv video

我有一个问题是使用OpenCV类VideoCapture在循环中打开许多视频文件(例如200)。您可以在下面找到我的代码。

更具体地说,我的程序成功打开了一定数量的视频(通常是171-173),但随后无法打开其他视频。我甚至试图打开相同的文件(如下例所示),但行为是一样的。

在我看来,它不应该是内存泄漏问题(实际上有内存泄漏,但总共消耗大约50MB)。我认为这与以下事实有关:当每个视频打开时,几个线程也被打开并且从不关闭,因此它们会累积。但我不知道这是否是真正的原因,或者如果是,如何解决它。

我正在使用Visual Studio进行编译,以及Windows 7操作系统。

如果您有任何线索和/或解决方案,请与我们联系。

string video_filename = "MyVideo.mp4";
for(int j=0; j<200; j++)
{
    VideoCapture video(video_filename);
    if(!video.isOpened())
    {
        cout << "Video #" << j << " could not be opened" << endl;
    }

    video.release(); // I've tried also to comment this out
}

我认为您可以轻松尝试重现此问题,因为代码非常简单。

1 个答案:

答案 0 :(得分:1)

我在Mac OS X上使用OpenCV 2.3.0并且在运行代码时没有遇到任何问题。

您可能需要upgrade your version to 2.3.1然后重试。如果问题仍然存在,则可能是Windows实施特有的问题,甚至可能仅限于Windows 7。

另一个猜测是使用OpenCV的C接口而不是现在使用的C ++接口来实现上面的程序。我曾经遇到过使用这个技巧修复的问题(与视频无关)。我不建议混合接口,所以如果你打算用C接口做一些事情,不要在你的程序中使用OpenCV的C ++接口

for (int j=0; j<200; j++)
{
    CvCapture* capture = cvCaptureFromAVI("MyVideo.mp4");
    if (!capture)
    {
        cout << "Video #" << j << " could not be opened" << endl;

        // Prevent calling cvReleaseCapture() on a capture that didn't succeeded
        continue; 
    }

    cvReleaseCapture(&capture);
}

我不记得它是cvCaptureFromAVI()还是cvCreateFileCapture()。请验证!