サイトアイコン 日本ベロモービル普及日誌

OpenCVのvideo capture sampleで”Corrupt JPEG data: * extraneous bytes before marker 0xd0″というエラーが出て落ちるときの対処法

Contents

はじめに

今日プログラミング教室用に、リアルタイムで画像処理するサンプルコードとして、opencvの公式ドキュメントにあるvideo captureのサンプルを紹介しようと動かそうとしてみましたが、すぐに動きませんでした。解決したのでここにメモしておきます。

環境

camera: logitech c270 usb webcam

OS distribution: Ubuntu18.04

OpenCV version: 3.2.0

エラー状況

sampleのビルドは成功する。実行すると、

Corrupt JPEG data: 1 extraneous bytes before marker 0xd7

というメッセージが表示されて落ちる。

原因

waitKey()が何もinputが無いと-1を返すはずが、255を返している(charにimplicit conversionされたよう)ので、if(waitKey(5)>=0) break; が実行されてしまい、プログラムが即終了している。

実は上記のメッセージはエラーメッセージではなく、warningであり、libjpegが出しているもの。どうやらwebcam側が送信量を削減するため、冗長なヘッダー情報を削っているから出るようなのですが、ちゃんと画像として取り扱ってくれるので、気にしなくて大丈夫。プログラムは実は落ちていたのではなく、即breakで終了していただけ。

対策

if(waitKey(5)>=0)  を if(waitKey(5)==’q’) などと、キー(ここでは’q’)で終了するようにする。

終わりに

なぜこんなbasicな問題がopenCVのサンプルコードで起きるままになっているのか分かりませんが、一件落着。無事エッジ抽出された画像が楽しめるようになりました。ではまた!

Please follow and like us:
モバイルバージョンを終了