在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;
}
输出始终为&#39; -3&#39;。 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-function cvCapture轻松快速地打开了具有相同路径路径的avi文件。 我得到了所有的&#39; C:\ opencv \ opencv \ build \ x86 \ vc10 \ bin&#39; 包含在mi调试文件中。我得到了tbb.dll和所有&#39; C:\ opencv \ opencv \ 3rdparty \ ffmpeg&#39;内容也包括在内。
这让我疯狂,所以任何帮助都会受到赞赏。
提前致谢。
答案 0 :(得分:5)
在我的情况下,删除opencv_***.dll
中的所有C:\Windows\System32
文件后,问题就解决了。所以,我只是通过像"%PATH%;C: \Program Files \OpenCV2.4.2\build\x86\vc10/bin"
这样的路径使用dll文件。请试一试。
答案 1 :(得分:3)
我也遇到了这个问题并通过纠正函数的路径解决了这个问题:
VideoCapture cap(videoName);
如果 videoName 的AVI文件不存在,则会出错:
(../../modules/highgui/src/cap_ffmpeg_impl.hpp:XXX)
其中XXX代表行号。
答案 2 :(得分:0)
在Windows 8(64位),opencv 2.4.10下运行时,我遇到了与open方法相同的问题。 IDE正在x86中运行。
我发现在发布配置中运行应用程序解决了这个问题。
偶然发现了答案,因为我遇到了与imread相同的问题。问题出现在这个帖子中。 imread not working in Opencv
答案 3 :(得分:0)
有关mp4文件的信息,请参阅下面的修复程序。 我使用OpenCV 2.4.9在Windows 7上遇到了同样的问题。我正在使用opencv的java包装器。
Matthias Krings为此做了大量研究。见this。显然这是基于视频文件类型的问题。使用.avi文件,它似乎适用于很多人。不幸的是,他设置OPENCV_DIR的解决方案对我不起作用。但他在错误列表中的评论给了我一个解决问题的提示。
你必须做两件事:
java.library.path
以包含目录{opencv\install\dir}opencv-2.4.9\build\x86\vc10\bin
。您可以使用java命令行上的-D
选项设置变量:java -Djava.library.path=PATH_TO_YOUR_DLL ...
。还可以使用System.getProperty(...)
从您的环境中获取此变量,并在调用loadLibrary()
之前打印它,以验证路径设置是否正常工作。 System.loadLibrary("opencv_ffmpeg249");
加载ffmpeg dll。应该在java中的loadLibrary()
内调用static block
函数。 opencv_ffmpeg249.dll
中有一个名为java.library.path
的文件。 .so
文件,这也适用于ubuntu。答案 4 :(得分:0)
我也遇到了同样的问题,并在指向输入视频的正确位置后解决了。