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のサンプルコードで起きるままになっているのか分かりませんが、一件落着。無事エッジ抽出された画像が楽しめるようになりました。ではまた!