LoginSignup
2
5

More than 1 year has passed since last update.

ROS OpenCVを使う (C++)

Last updated at Posted at 2021-06-13

ROSでdesktop-fullをインストールすると自動でOpenCVがインストールされます。
それを使用してC++からOpenCVを使ってみます。
今回の例では画像を読み込み、表示するといった簡単な処理を行います。

まずパッケージを作成します。

cd ~/catkin_ws/src
catkin_create_pkg opencv_test
cd opencv_test
mkdir src

そして、opencv_test/src内で画像を読み込み出力するプログラムを作成します。

src/main.cpp
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, const char * argv[])
{
    Mat img = imread( "image.png" );
    imshow("", img );
    waitKey(0);

    return 0;
}

以下コマンドでサンプル画像image.pngをダウンロードします。

wget https://github.com/hoshianaaa/TestFiles/raw/master/image.png

CMakeLists.txtを次のように作成します。

CMakeLists.txt
cmake_minimum_required(VERSION 3.0.2)
project(opencv_test)

find_package(OpenCV REQUIRED) #追加
find_package(catkin REQUIRED)

catkin_package(
)

include_directories(
 include
 ${OpenCV_INCLUDE_DIRS} #追加
)

add_executable(main src/main.cpp)
target_link_libraries(main
  ${OpenCV_LIBRARIES} #追加
)

ビルドと実行をします。

cd ~/catkin_ws

catkin build #または catkin_make

source ~/catkin_ws/devel/setup.bash

cd ~/catkin_ws/src/opencv_test/src
rosrun opencv_test main

実行コマンドrosrunはopencv_test/src内で行うことに注意してください。
すると"image.jpg"が出力されます。

image.jpg

追加サンプル

上のサンプルではなく以下のプログラムのように単色画像生成すると画像を用意する手間を省くことができます。

src/main.cpp
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, const char * argv[])
{
    //Mat img = imread( "image.jpg" );
    //単色画像の生成(参考:http://opencv.jp/cookbook/opencv_mat.html の 「cv::vecを使う」
    cv::Mat_<cv::Vec3b> img(300, 300, cv::Vec3b(0,200,0)); // 追加

    imshow("", img );
    waitKey(0);

    return 0;
}

実行結果

Screenshot from 2021-11-13 08-10-40.png

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5