【问题标题】:VideoCapture OpenCV 2.4.2 error in windowsWindows 中的 VideoCapture OpenCV 2.4.2 错误
【发布时间】:2012-08-30 01:52:36
【问题描述】:

我在 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 文件。 我得到了 'C:\opencv\opencv\build\x86\vc10\bin' 的所有 dll 包含在 mi 调试文件中。我也得到了 tbb.dll 和所有 'C:\opencv\opencv\3rdparty\ffmpeg' 内容。

这让我发疯了,所以任何帮助都将不胜感激。

提前致谢。

【问题讨论】:

  • this question 的第一个答案可能是您的情况:尝试将 opencv_ffmpeg242d.dll 或 opencv_ffmpeg242.dll 复制到您当前的工作目录。另外,您自己构建过 OpenCV 吗?你确定所有的依赖都ok吗?
  • 我还是有同样的问题。我在一些论坛上读到可能需要更新编解码器。我会试试的。问题解决了吗?

标签: opencv


【解决方案1】:

就我而言,删除C:\Windows\System32 中的所有opencv_***.dll 文件后,同样的问题得到了解决。因此,我只是通过"%PATH%;C: \Program Files \OpenCV2.4.2\build\x86\vc10/bin" 之类的路径使用 dll 文件。请尝试一下。

【讨论】:

  • 我(保守地)试图将所有 opencv_*.dll 文件移出 Windows\System32 和 Windows\SysWOW64。重启了,还是不行。压缩 dll 并删除原件;再次重启,效果很好!所以Young-Shik Kwon的建议非常好。
【解决方案2】:

我也遇到过这个问题,通过改正函数的路径解决了:

VideoCapture cap(videoName);

如果videoName的AVI文件不存在,则会报错:

(../../modules/highgui/src/cap_ffmpeg_impl.hpp:XXX)

其中 XXX 代表行号。

【讨论】:

    【解决方案3】:

    在 Windows 8(64 位)opencv 2.4.10 下运行时,我在 open 方法上遇到了同样的问题。 IDE 在 x86 中运行。

    我发现在发布配置中运行应用程序解决了这个问题。

    偶然发现了答案,因为我对 imread 有同样的问题。此线程中提出了问题。 imread not working in Opencv

    【讨论】:

      【解决方案4】:

      请参阅我在下面找到的针对 mp4 文件的修复程序。 我在使用 OpenCV 2.4.9 的 Windows 7 上遇到了同样的问题。我正在为 opencv 使用 java 包装器。

      Matthias Krings 对此进行了大量研究。见this。显然,这是基于视频文件类型的问题。使用 .avi 文件,它似乎适用于很多人。不幸的是,他设置 OPENCV_DIR 的解决方案对我不起作用。但是他在 bug 列表中的 cmets 给了我解决问题的提示。

      你必须做两件事:

      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。 loadLibrary() 函数应该在 java 中的 static block 中调用。
      3. 在我们设置的java.library.path中有一个名为opencv_ffmpeg249.dll的文件。
      4. 这也适用于 ubuntu,适用于 .so 文件。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2012-07-11
          • 2012-07-14
          • 2013-06-22
          • 1970-01-01
          • 2016-06-17
          • 2018-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多