2012-09-05 25 views
6

Windows XP 32ビットでOpenCV 2.4.2でVideoCaptureクラスを使用する際に問題があります。 ファイルやカメラが開かず、固定しても痛いです。 私はVisual Studio 2010を使用していますが、QTcreatorのコードも同じ結果で試してみました。VideoCapture OpenCV 2.4.2ウィンドウでのエラー

テストコードは、以下である:

#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'。私はそれをデバッグエラー開くファイル(../../modules/highgui/src/cap_ffmpeg_impl.hpp:361)

と問題が最初の行に表示されます: のQt Creatorは 警告を示し

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内部ファイル。

私はSnow Leopardの下でMacで同じコードをテストしています。それは図書館の問題でなければならないのでここで驚きはありません。 c-function cvCaptureを使用して、同じパスルートでaviファイルを簡単に開くことができました。 miデバッグファイルに含まれる 'C:\ opencv \ opencv \ build \ x86 \ vc10 \ bin'のすべてのdllファイルを に持っています。私はtbb.dllとすべての 'C:\ opencv \ opencv \ 3rdparty \ ffmpeg'の内容も含めています。

これは私を夢中にしていますので、どんな助けにも感謝します。

ありがとうございます。

+0

[この質問](http://stackoverflow.com/questions/1987782/why-opencvs-cvcreatecameracapture-and-cvcreatefilecapture-do-not-work-how)への最初の答えはあなたの場合です:opencv_ffmpeg242dをコピーしてみてください.dllまたはopencv_ffmpeg242.dllを現在の作業ディレクトリにコピーします。また、自分でOpenCVをビルドしましたか?すべての依存関係は大丈夫ですか? – Sassa

+0

私はまだ同じ問題を抱えています。私はいくつかのフォーラムで、おそらく更新用のコーデックが必要であると読んだ。私はそれを試みます。あなたは問題を解決しましたか? –

答えて

5

私の場合、opencv_***.dllファイルをすべて削除した後、同じ問題が解決されました。C:\Windows\System32です。したがって、私は"%PATH%;C: \Program Files \OpenCV2.4.2\build\x86\vc10/bin"のようなパスを介してdllファイルを使用します。試してみてください。

私もこの問題に直面し、正しいことで機能のパスを、それを解決し
+0

ありがとうございました! – Cits

+0

私は(控えめに)すべてのopencv _ *。dllファイルをWindows \ System32からWindows \ SysWOW64から移動しようとしました。リブートしても、まだ動作しませんでした。 DLLを圧縮して元のファイルを削除した。もう一度リブートして、これはうまくいった!それで、権永植の提案はとても良いです。 –

3

VideoCapture cap(videoName); 

videoName does'tのAVIファイルが存在する場合、それはエラーになります:

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

XXXは行番号を表します。

0

私はWindows 8(64ビット)、opencv 2.4.10で動作しているときにopenメソッドと同じ問題がありました。 IDEはx86で動作しています。

リリース構成でアプリケーションを実行すると問題が解決したことがわかりました。

私はimreadと同じ問題があったので、答えにつきました。問題はこのスレッドで提示されます。 imread not working in Opencv

0

mp4ファイルについては、下記の修正をご覧ください。 OpenCV 2.4.9を使用して、Windows 7でも同じ問題が発生しました。 opencvのJavaラッパーを使用しています。

マティアスクリングスは、これについて多くの研究を行っています。 thisを参照してください。どうやらこれはビデオファイルの種類に基づく問題です。 .aviファイルを使用すると、多くの人にとってうまくいくようです。残念ながら、OPENCV_DIRを設定する彼の解決策は私にとっては役に立たなかった。しかし、バグリストの彼のコメントは私にこの問題を解決するヒントを与えました。ディレクトリ{opencv\install\dir}opencv-2.4.9\build\x86\vc10\binを含めるように

  1. 設定java.library.path

    あなたは二つのことを行う必要があります。 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ファイルで動作します。
0

私も同じ問題に直面し、入力ビデオの正しい場所を指した後に解決しました。

関連する問題