6

我在 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' 内容。

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

提前致谢。

4

5 回答 5

5

opencv_***.dll就我而言,在删除C:\Windows\System32. 所以,我只是通过路径使用 dll 文件,例如"%PATH%;C: \Program Files \OpenCV2.4.2\build\x86\vc10/bin". 请尝试一下。

于 2013-02-19T12:43:51.267 回答
3

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

VideoCapture cap(videoName);

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

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

其中 XXX 代表行号。

于 2014-03-31T08:26:48.053 回答
0

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

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

偶然发现了答案,因为我对 imread 有同样的问题。此线程中提出了问题。 imread 在 Opencv 中不起作用

于 2014-12-13T14:48:25.993 回答
0

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

Matthias Krings 为此做了很多研究。看到这个。显然,这是基于视频文件类型的问题。使用 .avi 文件,它似乎适用于很多人。不幸的是,他设置 OPENCV_DIR 的解决方案对我不起作用。但他在错误列表中的评论给了我解决问题的提示。

你必须做两件事:

  1. 设置java.library.path为包含目录{opencv\install\dir}opencv-2.4.9\build\x86\vc10\bin-D您可以使用java 命令行上的选项设置变量: java -Djava.library.path=PATH_TO_YOUR_DLL .... 还要从您的环境中获取此变量,使用System.getProperty(...)并在调用之前打印它loadLibrary(),以验证路径设置是否有效。
  2. 在您的 java 类中,使用System.loadLibrary("opencv_ffmpeg249");. 该loadLibrary()函数应从static blockjava 中的 a 中调用。
  3. opencv_ffmpeg249.dlljava.library.path我们设置的 中有一个名为的文件。
  4. 这也适用于 ubuntu,适用于.so文件。
于 2015-03-26T12:21:23.923 回答
0

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

于 2017-09-22T18:49:33.250 回答