繁体   English   中英

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

[英]OpenCV VideoCapture fail to open many video files

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

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

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

我正在使用Visual Studio进行编译,并使用Windows 7 OS。

如果您有任何线索和/或解决方案,请告诉我。

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
}

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

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

您可能需要将版本升级到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() 请验证!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM