我有一个问题是使用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
}
我认为您可以轻松尝试重现此问题,因为代码非常简单。
答案 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()
。请验证!