質問: OpenCVでUSBカメラを使ってwebカメラを試しています。 現在、カメラで撮影した映像をウィンドウに表示することまでできています。 これに追加で、2点行いたいことがありますが、 どうしたらできるのか、そもそもできるのかが分かりません。 皆さんのお知恵を拝借できたらと思います。 <1点目> カメラのキャプチャウィンドウに時刻を表示したいのですが、 どのようにプログラムを書けばよいのでしょうか。 そもそも、キャプチャ表示用のウィンドウに何かを同時に表示することは可能なのでしょうか。 <2点目> 現在はカメラのスペック通りのフレームレートで表示をしていますが、 1秒ごとの粗いフレームレートでの表示をしたいです。 私が調べた限りでは、OpenCVではカメラのフレームレートを変更することはできないと理解しています。 そのため、1秒ごとに静止画像を表示するイメージでプログラミングすればよいのだと思いますが、その方法が分かりません。 ご回答、よろしくお願いいたします。 参考(環境) Raspberry Pi 3 OpenCV 2.4.13.3 使用言語 C (訳あってC++が使用不可) USBカメラ Logicool K270
回答: * **キャプチャ用のウィンドウに何かを同時に表示できるか** 可能です。 cvShowImageより前に、画像のデータをいじってしまえばよいです。 * **キャプチャウィンドウに文字を描画したい** cvPutTextを用いれば可能かと思います。 * **現在時刻を取得したい** C言語のtime.hを適宜利用してください。 * **カメラのフレームレートを調整したい** あんまり厳密でなくてもよいのなら、cvWaitKeyの引数をいじればいいです。 FPSを直接いじるためには、cvSetCapturePropertyを用いる必要があります。 **※MasahikoHirata様に情報提供いただきました。感謝いたします。** 上記のリファレンスに従えば、次のようにすればFPSを変更できます。 ``` cvSetCaptureProperty(videoCapture, CV_CAP_PROP_FPS, 1.0); ``` ただし、実際にはすんなりいかない場合も多いようです。 OpenCVのキャプチャは「とりあえず」という使い方が一番 > > プロパティを設定するcvSetCaptureProperty()という関数の実装が不完全であり、 > > 設定できない項目がかなりたくさんあります (中略) どうしてもOpenCVだけで行いたい場合は、highgui.hの中身を書き換えなきゃならない > > > 設定が成功したかどうかは、返り値で判断できるかもしれません。 OpenCVでカメラのFPSが設定できません > > とりあえず,まず cap.set(CV_CAP_PROP_FPS,1); の戻り値をチェックしてはどうでしょうか.設定不能であれば,falseが返ってるのではないかと. > > > 上記はC++での場合ですが、cvSetCapturePropertyにも返り値があるようなので。 なお、先ほどのリファレンスには返り値に関連する記述はありません。 C++でしかOpenCV利用の経験がないです、おかしな事を書いていたらすみません。 また、どうしてもC++の情報しか見つからない場合は... 関数の頭にcvと付けて検索すればだいたい見つかります。 | C++ | C | | --- | --- | | cv::putText | cvPutText | | cv::waitKey | cvWaitKey | こんな感じに。