目的
ROSのOpenCV_Appsを使って画像処理を実行する。OpenCV_Appsには、OpenCVの機能を使ったさまざまなノードがあり、その結果をROSトピックとして出力することができる。
OpenCV_Appsを使用すると、OpenCVのコードを書く必要がなくlaunchファイルを実行するだけで、必要なOpenCVの機能に対応する多くの機能を使うことができる。
ROSのlaunchファイルでパラメータを変更できるので、コンパイルせずにパラメータ最適化することも可能である。
ROSのUSBカメラからの画像データに、OpenCV_Appsをつなぐことで、画像処理を行う。
参考:http://wiki.ros.org/opencv_apps
環境
Ubuntu-14.04.1(x64)
ROS:Indigo
インストール
opencv-appsをapt-getでインストールする。
-ROS Indigoの場合
sudo apt-get install ros-indigo-opencv-apps
sudo apt-get install ros-indigo-usb-cam
-ROS Kineticの場合
sudo apt-get install ros-kinetic-opencv-apps
sudo apt-get install ros-kinetic-usb-cam
USBカメラ起動
以下のコマンドでUSBカメラを起動する
$ roscore
$ rosrun usb_cam usb_cam_node
$ rosrun image_view image_view image:=/usb_cam/image_raw
カメラが起動した後に、個々のlaunchファイルを起動すると、画像処理の結果が表示される。ROSで動作しているので、平行して起動して問題ない。
エッジ抽出ノード集(Edge Detection Nodes)
edge_detection
roslaunch opencv_apps edge_detection.launch image:=/usb_cam/image_raw
hough_lines
ハフ変換で直線検出を行うノード
roslaunch opencv_apps hough_lines.launch image:=/usb_cam/image_raw
hough_circles
ハフ変換で円検出を行うノード

roslaunch opencv_apps hough_circles.launch image:=/usb_cam/image_raw
構造解析ノード集(Structual Analysis Nodes)
find_contours
輪郭検出を行うノード
roslaunch opencv_apps find_contours.launch image:=/usb_cam/image_raw
convex_hull
凸包を行うノード
roslaunch opencv_apps convex_hull.launch image:=/usb_cam/image_raw
general_contours
輪郭への楕円あてはめを行うノード
roslaunch opencv_apps general_contours.launch image:=/usb_cam/image_raw
contour_moments
輪郭の動き検出を行うノード
roslaunch opencv_apps contour_moments.launch image:=/usb_cam/image_raw
人間・顔検出ノード集(People/Face Detection Nodes)
face_detection
Cascade分類による顔検出を行うノード
roslaunch opencv_apps face_detection.launch image:=/usb_cam/image_raw
face_recognition
顔認識を行うノード
顔がだれの顔なのか、識別することができる。
roslaunch opencv_apps face_recognition.launch image:=/usb_cam/image_raw
people_detect
HOG特徴量による人検出を行うノード

roslaunch opencv_apps people_detect.launch image:=/usb_cam/image_raw
動作解析ノード集(Motion Analysis Nodes)
goodfeature_track
特徴検出を行うノード
roslaunch opencv_apps goodfeature_track.launch image:=/usb_cam/image_raw
camshift
CamShiftでの色検出を行うノード
roslaunch opencv_apps camshift.launch image:=/usb_cam/image_raw
fback_flow
Gunnar Farneback のオプティカルフロー検出を行うノード
roslaunch opencv_apps fback_flow.launch image:=/usb_cam/image_raw
lk_flow
Lucas-Kanade法のオプティカルフロー検出を行うノード
roslaunch opencv_apps lk_flow.launch image:=/usb_cam/image_raw
phase_corr
周波数領域での位相のコリレーションの計算を行うノード
roslaunch opencv_apps phase_corr.launch image:=/usb_cam/image_raw
simple_flow
simple_flow のオプティカルフロー検出を行うノード
roslaunch opencv_apps simple_flow.launch image:=/usb_cam/image_raw
物体抽出ノード集(Object Segmentaion Nodes)
segment_objects
単一物体の領域分割を行うノード
roslaunch opencv_apps segment_objects.launch image:=/usb_cam/image_raw
watershed_segmentation
物体の領域分割を行うノード
roslaunch opencv_apps watershed_segmentation.launch image:=/usb_cam/image_raw
画像フィルタノード集(Image Filter Nodes)
rgb_color_filter
roslaunch opencv_apps rgb_color_filter.launch image:=/usb_cam/image_raw
hls_color_filter
roslaunch opencv_apps hls_color_filter.launch image:=/usb_cam/image_raw
hsv_color_filter
roslaunch opencv_apps hsv_color_filter.launch image:=/usb_cam/image_raw
roswikiに未掲載のもの
corner_harris
harrisのコーナ検出
roslaunch opencv_apps corner_harris.launch image:=/usb_cam/image_raw
adding_images
画像の合成
roslaunch opencv_apps adding_images.launch image1:=/usb_cam/image_raw image2:=/usb_cam/image_raw
discrete_fourier_transform
FFT変換
roslaunch opencv_apps discrete_fourier_transform.launch image:=/usb_cam/image_raw
smoothing
画像にsmoothing処理をいれる
roslaunch opencv_apps smoothing.launch image:=/usb_cam/image_raw
threshold
閾値で領域抽出する。
roslaunch opencv_apps threshold.launch image:=/usb_cam/image_raw