我正在从 EmguCV 交换到 OpenCV,以便我可以尝试一些尚未被 EmguCV 包装的 OpenCV 函数。但是我无法加载我的简单测试视频文件,该文件在 EmguCV 中加载没有问题。查看 EmguCV 源代码,我注意到他们调用 OpenCV C 函数而不是 C++ 来初始化从文件(或网络摄像头)捕获的内容,因此我编写了以下测试代码(在此答案的帮助下)。这是我的简单代码
int _tmain()
{
string filename = "sample.wmv";
if (!FileExists(filename.c_str))
{
cout << "File does not exist" << endl;
return -1;
}
else
{
cout << "File exists" << endl;
VideoCapture cap (filename);
if(!cap.isOpened())
{
cout << "Failed to open file in OpenCV C++" << endl;
//Trying C API too just-in-case
CvCapture* capture = cvCreateFileCapture(filename.c_str());
if (!capture)
{
cout << "Failed to open file in OpenCV C" << endl;
}
else
{
//Grab frames and do stuff
cvReleaseCapture(&capture);
}
return -1;
}
else
{
//Grab frames and do stuff
}
}
return 0;
}
当我运行它时,我得到了输出
File exists
Failed to open file in OpenCV C++
Failed to open file in OpenCV C
无论文件如何,都会发生这种情况,即“sample.wmv”、“sample.avi”,甚至是 OpenCV 示例文件“tree.avi”之一。
为什么?到底是怎么回事?
(我在 Windows 8 和 Windows 8.1 机器上运行 OpenCV 2.4.6。)