2013-03-20 14 views
11
このerorrメッセージはロジクールC270(OpenCVの2.4.2/C++)でUbuntuでシンプルなカメラのキャプチャを実行するに表示されます

OpenCVのエラー - >のHighGUI ERROR:V4L/V4L2:VIDIOC_S_CROP

HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP

、さらに:

Corrupt JPEG data: 2 extraneous bytes before marker 0xd1 Corrupt JPEG data: 1 extraneous bytes before marker 0xd6 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0

は、私はフレームを取得するが、マットオブジェクトへの書き込み時にスワップ枠の幅と高さの値は、以下を参照:

Mat frame; 
videoCapture = new VideoCapture(camId); 
if(!videoCapture->isOpened()) throw Exception(); 

cout << "Frame width: " << videoCapture->get(CV_CAP_PROP_FRAME_WIDTH) << endl; 
cout << "Frame height: " << videoCapture->get(CV_CAP_PROP_FRAME_HEIGHT) << endl; 

(*videoCapture) >> frame; 

cout << "Mat width: " << frame.rows << endl; 
cout << "Mat height: " << frame.cols << endl; 

出力:

Frame width: 640 
Frame height: 480 
Mat width: 480 
Mat height: 640 

答えて

2

画像の幅は、列のその数によって与えられます。あなたのコードは

cout << "Mat width: " << frame.cols << endl; 
cout << "Mat height: " << frame.rows << endl; 

である必要があります。したがって、幅と高さの入れ替えはありません。

+0

申し訳ありませんが、私のせいです.- – user2192424

+3

しかし、私はあなたが得るエラーメッセージを取り除く方法を知らない。私は彼らも私のマシンで手に入れます。 – carlito

7

問題をデバッグする気がなく、ウェブカメラのフレームが問題なく表示されている場合は、メッセンジャーを撮影するだけです。事前ビルドされたバイナリをインストールするのではなく、ソースからOpenCVをビルドした場合は、以下の手順が有効です。

grep -R "Corrupt JPEG data" ~/src/opencv-2.4.4/で始まり、必要なものが見つかるまで、ウサギの穴に深く入ります。私の場合、犯人はopencv-2.4.4/thirdparty/libjpeg/jdmarker.c:908である:

if (cinfo->marker->discarded_bytes != 0) { 
    WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c); 
    cinfo->marker->discarded_bytes = 0; 
    } 

WARNMS2マクロは、印刷される無関係なデータに関するエラーメッセージを引き起こしているものです。コメントアウトして、OpenCVを再構築し、あなたの仕事を続けてください。私もC270を持っていて、Ubuntu 12.04を走らせて、私が上で説明したことをするまで、同じいたずらエラーメッセージを経験しました。問題について

5

Corrupt JPEG data: 2 extraneous bytes before marker 0xd1 Corrupt JPEG data: 1 extraneous bytes before marker 0xd6 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0

は問題はのlibjpegライブラリ内にある、ように見えます。未知の理由により、OpenCVライブラリでは正しく動作しません。 JPEGのサポートなしにコンパイルしようとしましたが、この問題は解決しました。

cmakeの-D CMAKE_BUILD_TYPE =盤-D CMAKE_INSTALL_PREFIX =は/ usr/local -D BUILD_SHARED_LIBS = OFF -D BUILD_EXAMPLES = OFF -D BUILD_TESTS = OFF -D BUILD_PERF_TESTS = OFF -D WITH_JPEG = OFF -D WITH_IPP = OFF ..

あなたは私のブログですべての詳細を見つけることができます:

http://privateblog.info/linux/opencv-i-corrupt-jpeg-data-na-linux/

+2

Linux上のJDKには、独自のlibjpegが含まれています。コンパイル時に、このライブラリがlinuxの正しい代わりに使われると思います。そしてそれは問題を引き起こします。 – Kanaris007

0

あなただけ素早く出力を取り除くためにとgrep -v Corruptは何とかのために動作しない場合 - のような私のために - あなたはまた、標準エラー出力をリダイレクトすることができ何もない、例えば

./my_app 2> /dev/null 

python my_app.py 2> /dev/null 

もちろん、他のエラーメッセージも隠すことになります。

関連する問題