この記事について
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プログラムを考えます。
#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
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_DIR
にOpenCVConfig.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