Raspberry Pi カメラモジュールで撮った画像をopencv_appsで画像処理してみる
前回までのところで、raspicam_nodeを使ってROSでRaspberry Piカメラモジュールのカメラで画像を取得できるようになった。今回は、有名なオープンソースの画像処理ライブラリであるOpenCVを使って、カメラの画像を画像処理してみる。
なお、今回はROSでOpenCVを使えるパッケージであるopencv_appsを使うことにする↓
http://wiki.ros.org/opencv_apps
実行環境
Raspberry Pi 4 Model B / 4GB
Ubuntu Server 20.04.5 LTS(64-bit)
ROS Noetic Ninjemys
Raspberry Pi カメラモジュール Rev1.3
opencv_appsをインストールする
まずはopencv_appsをインストールする。ubuntuをインストールしたラズパイを起動して、ターミナルから以下のコマンドを実行してnoetic用のopencv_appsをインストールする。
sudo apt install ros-noetic-opencv-apps
インストールが問題なく終了すれば準備は完了。
raspicam_nodeを起動する
まず、以前と同じ手順でraspicam_nodeを起動するが、raspicam_nodeのlaunchファイルをデフォルトで実行すると取得した画像は圧縮される。opencv_appsで画像処理する場合は圧縮する前のraw画像じゃないとうまくいかなかったので、以下のようにenable_raw:=trueオプションをつけてlaunchファイルを実行する。
roslaunch raspicam_node camerav1_1280x720.launch enable_raw:=true
ここでいったん以下のコマンドでimage Viewを起動してraspicam_nodeの画像を見てみる。
rqt_image_view
いつものごとく、今回も青いミニカーを被写体にしている。
今回はopencv_appsのlaunchファイルをつかって、edge_detectionのデモを実行してみる。別のターミナルを起動し、
roslaunch opencv_apps edge_detection.launch image:=/raspicam_node/image/
を実行すると、ウィンドウが起動して以下のようにエッジ検出された画像が表示される。ミニカーの輪郭や、カーテンの折り目が検出されていることがわかる。なお、色々とパラメータを変えてlaunchファイルを実行することもできる。
edge detectionの他にも色々とデモが準備されているので、次回以降もopencv_appsを使って色々と遊んでいきたい。
ROS勉強記まとめ
この勉強記は以下のページでまとめてます。