LoginSignup
28
18

More than 1 year has passed since last update.

CMakeでOpenCVアプリケーション開発

Last updated at Posted at 2018-09-29

この記事について

CMakeを使って、OpenCVアプリケーション開発用プロジェクトを作ります。WindowsとLinuxの両方でビルドできるようにします。

  • CMakeを使うことのメリット
    • マルチプラットフォーム対応
    • インクルードパスやライブラリ設定を自動化できる
    • (特に、GitHub等で他の人に渡すときに便利)

環境

  • Windows10 64-bit
    • Visual Studio 2017 Community
  • Ubuntu 16.04 on VirtualBox on Windows 10
  • OpenCV 3.4.1

対象とするプログラム

定番の、Lenaさんを表示するだけのOpenCVプログラムを考えます。

main.cpp
#include <stdio.h>
#include <opencv2/opencv.hpp>

int main()
{
    printf("Hello\n");

    cv::Mat image = cv::imread(RESOURCE_DIR"lena.jpg");
    cv::imshow("Display", image);

    cv::waitKey(0);
    return 0;
}

OpenCVの準備

Windows

OpenCVの取得

カスタマイズ不要なら、公式(https://opencv.org/ )から配布されているバイナリを使用するのが楽です。
https://opencv.org/opencv-3-4-1.html に行き、DownloadのWin packをクリック。
ダウンロードしたopencv-3.4.1-vc14_vc15.exeを展開後、c:\opencvに配置。

環境変数の設定

Windowsのシステムのプロパティ→環境変数で、環境変数を設定し、パスも追加します。
- OpenCV_DIR: C:\opencv\build
- Path: %OpenCV_DIR%\x64\vc15\bin を追加

Linux (Ubuntu)

だいぶ前にインストールしたので、忘れてしまいました。
とりあえず試すだけなら、aptでのインストールで大丈夫だと思います。最新版が使いたい場合は、ソースからビルドして、最後にインストールすればOKです。
もしかしたら、export OpenCV_DIR=OpenCVの場所をしておく必要があるかもしれません。

プロジェクトの作成

└─TestOpenCV
    │  CMakeLists.txt
    │  main.cpp
    │
    └─resource
            lena.jpg
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(MyOpenCVProject)

# Copy resouce
file(COPY ${CMAKE_SOURCE_DIR}/resource/ DESTINATION ${PROJECT_BINARY_DIR}/resource/)
add_definitions(-DRESOURCE_DIR="${PROJECT_BINARY_DIR}/resource/")

# Create Main project
set(SOURCES
    main.cpp
)

set(HEADERS
    # main.h
)

add_executable(Main
    ${SOURCES}
    ${HEADERS}
)


# For OpenCV
find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
    target_include_directories(Main PUBLIC ${OpenCV_INCLUDE_DIRS})
    target_link_libraries(Main ${OpenCV_LIBS})
endif()


CMakeを使うと、一般的にはout of sourceビルドといい、ソースコードとビルドする場所が異なります。そのため、画像等のリソースファイルをいちいちコピーするのが面倒なので、resourceフォルダを自動的にコピーして、その場所を定義しておくようにしました。
次に、main.cppを使って、Mainという実行ファイルを作っています。
最後に、OpenCVパッケージを探して、見つかったらincludeパス設定と、ライブラリリンク設定をしています。

(おまけ) セルフビルドした、指定の場所にあるOpenCVを使いたいとき

cmake時に、OpenCV_DIROpenCVConfig.cmakeの場所へのパス を設定する

# OpenCVのビルド
apt -y install git libgtk-3-dev libdc1394-22 libdc1394-22-dev ffmpeg libavcodec-dev libavformat-dev libswscale-dev libavresample-dev
git clone https://github.com/opencv/opencv.git --branch 4.5.5 --depth 1
cd opencv && mkdir -p build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=./install
make -j4
make install

# 自分のプロジェクトの生成
source /root/opencv/build/install/bin/setup_vars_opencv4.sh
cd 自分のプロジェクト && mkdir -p build && cd build
cmake .. -DOpenCV_DIR=/root/opencv/build
28
18
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
28
18