Windows中的VideoCapture OpenCV 2.4.2错误

时间:2012-09-05 10:52:16

标签: opencv

在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;内容也包括在内。

这让我疯狂,所以任何帮助都会受到赞赏。

提前致谢。

5 个答案:

答案 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的解决方案对我不起作用。但他在错误列表中的评论给了我一个解决问题的提示。

你必须做两件事:

  1. 设置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()之前打印它,以验证路径设置是否正常工作。
  2. 在您的java类中,使用System.loadLibrary("opencv_ffmpeg249");加载ffmpeg dll。应该在java中的loadLibrary()内调用static block函数。
  3. 我们设置的opencv_ffmpeg249.dll中有一个名为java.library.path的文件。
  4. 对于.so文件,这也适用于ubuntu。

答案 4 :(得分:0)

我也遇到了同样的问题,并在指向输入视频的正确位置后解决了。