前回に引き続きgtkmmを用いたGUIアプリで開発についてです。
前回はgtkmmでボタンやlabelを表示した簡単なアプリを作成しました。
elsammit-beginnerblg.hatenablog.com
今回はこちらのGUIアプリに画像や動画を表示させてみたいと思います。
っといっても、すでにサンプルを公開されている方がいらっしゃいましたのでこちらを利用していこうと思います。
■サンプルソースの取得と環境構築
まずはサンプルソースであるこちらをgithubからダウンロードしていきます。
https://github.com/doleron/gtk3-opencv3-ux-sampling
git clone https://github.com/doleron/gtk3-opencv3-ux-sampling
成功すれば gtk3-opencv3-ux-sampling という名前のフォルダが生成されるかと思います。
次に、
mkdir gtk3-opencv3-ux-sampling/build cd gtk3-opencv3-ux-sampling/build cmake .. make
を実行してサンプルコードをビルドしていきます。
■OpenCVコード修正
先ほどのmakeでエラーなく完了すればよいのですが、
こちらのようにOpenCV系のエラーが発生する場合があります。
camera_image_window.cpp:49:35: error: ‘CV_BGR2RGB’ was not declared in this scope; did you mean ‘CV_RGB’? 49 | cv::cvtColor(frameBGR, frame, CV_BGR2RGB); camera_image_window.cpp:68:14: error: ‘CV_CAP_PROP_FRAME_WIDTH’ was not declared in this scope 68 | camera.set(CV_CAP_PROP_FRAME_WIDTH, 640);
どうやら、CV_BGR2RGBやCV_CAP_PROP_FRAME_WIDTHといった定義は古いらしく、
最新のOpenCVでは異なる定義を利用されているようです!!
このため、camera_image_window.cppのコードをこちらのように修正していきます。
#49行目. cv::cvtColor(frameBGR, frame, cv::COLOR_BGR2RGB);
#68行目~70行目 camera.set(cv::CAP_PROP_FRAME_WIDTH, 640); camera.set(cv::CAP_PROP_FRAME_HEIGHT, 480); camera.set(cv::CAP_PROP_FPS, 30);
これで再度
make
を実行すれば成功するかと思います。
■実行してみる
こちらのサンプルコードには画像表示と動画表示の2つが用意されています。
それぞれこちらのように実行すればよいです。
●画像表示
./gtk3_opencv3_ux single-image 画像ファイルパス
●カメラキャプチャ表示
./gtk3_opencv3_ux cam-grabber ビデオデバイス
実行した結果はそれぞれこんな感じです。
●画像表示
●カメラキャプチャ表示
mp4などの動画表示を行いたい場合には、
camera_image_window.cpp内の
bool result = camera.open(cameraIndex);
を、
bool result = camera.open(ビデオパス);
に置き換えてからmake頂ければOKです。