##目的
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
RGB色空間でマスクをかけるノード
roslaunch opencv_apps rgb_color_filter.launch image:=/usb_cam/image_raw
###hls_color_filter
HLS色空間でマスクをかけるノード
roslaunch opencv_apps hls_color_filter.launch image:=/usb_cam/image_raw
###hsv_color_filter
HSV色空間でマスクをかけるノード
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