WindowsXP32ビットでOpenCV2.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内部ファイルにあります。
私はユキヒョウの下でマックで同じコードをテストしました、そしてそれは働きます。これはライブラリの問題であるに違いないので、ここで驚くことはありません。c-function cvCaptureを使用して、同じパスルートでaviファイルを簡単かつ高速に開きました。miデバッグファイルに含まれている「C:\ opencv \ opencv \ build \ x86 \ vc10\bin」のすべてのdllを取得しました。tbb.dllとすべての「C:\ opencv \ opencv \ 3rdparty\ffmpeg」コンテンツも含まれています。
これは私を夢中にさせているので、どんな助けもいただければ幸いです。
前もって感謝します。