我在 windows XP 32 位下使用带有 OpenCV 2.4.2 的 VideoCapture 类时遇到问题。它不会打开任何文件或相机,修复它很痛苦。我使用的是 Visual Studio 2010,但我也尝试了 QTcreator 中的代码,结果相同。
测试代码如下:
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include <iostream>
#include <string>
#include <iomanip>
#include <sstream>
using namespace cv;
using namespace std;
int main()
{
const char* videoPath = "C:/video/";
string videoName = string(videoPath) + "avi.avi";
VideoCapture cap(videoName);
if(!cap.isOpened())
{
std::cout<<"Fail"<<std::endl;
return -3;
}
return 0;
}
输出始终为“-3”。Qt Creator 显示警告:打开文件时出错 (../../modules/highgui/src/cap_ffmpeg_impl.hpp:361)
我调试了它,问题出现在第一行:
CvCapture* cvCreateFileCapture_FFMPEG_proxy(const char * filename)
{
CvCapture_FFMPEG_proxy* result = new CvCapture_FFMPEG_proxy;
if( result->open( filename ))
return result;
delete result;
#if defined WIN32 || defined _WIN32
return cvCreateFileCapture_VFW(filename);
#else
return 0;
#endif
}
在 cap_ffmpeg.cpp 内部文件中。
我已经在雪豹下的 mac 中测试了相同的代码,它可以工作。这里没有惊喜,因为它一定是图书馆的问题。我已经使用 c 函数 cvCapture 轻松快速地打开了具有相同路径路径的 avi 文件。我得到了 mi 调试文件中包含的所有 'C:\opencv\opencv\build\x86\vc10\bin' 的 dll。我得到了 tbb.dll 和所有的 'C:\opencv\opencv\3rdparty\ffmpeg' 内容。
这让我发疯,所以任何帮助将不胜感激。
提前致谢。