DebianでOpenCVをC++で使う必要があったので環境を構築したら大いに苦戦したので構築メモを残す。
今回導入したバージョンはOpenCV4.1.1。 もしかしたらOpenCV3.xならもっと楽だったかもしれない。
ちなみにPythonでOpenCVを使うならば下記のサイトのインストールスクリプト(install-opencv.sh)を実行するだけで簡単だった。
http://milq.github.io/install-opencv-ubuntu-debian/
基本的にはOpenCVの公式サイト( https://opencv.org/ )の「Tutorials」→「Introduction to OpenCV」→「Installation in Linux」の通りに進めていく。
一応転記していく
必要なソフトウェアをインストールしていく
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
ソースコードを取得
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
ビルドしたものを格納するディレクトリを作る
cd opencv
mkdir build
cd build
cmakeする。割とすぐ終わる。
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
makeする
jの後の数字は使用PCのスレッド数に合わせると高速になる。
ふつうのPCなら数分で終わるが、ふつうじゃないPCだと1日放置するレベルで時間がかかる。
make -j4
makeしたものを使えるようにする。
こちらもふつうのPCなら一瞬で終わるが、ふつうじゃないPCだと(なぜか)1日放置するレベルで時間がかかる。
sudo make install
時間がかかる場合はこちらもjを指定するとよい(かも)
sudo make -j4 install
上記が完了したらさっそくOpenCVを使ってみる。
C++のコードは以下
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(){
Mat image = imread("xxxx.bmp");
return 0;
}
g++ test.cpp
当然のごとくエラー
test.cpp:4:30: fatal error: opencv2/opencv.hpp: そのようなファイルやディレクトリはありません
compilation terminated.
インクルードパスを設定する。
インクルードパスはOpenCV4.xでは3.xと変わっているので注意
参考:OpenCVインストール構成の変遷(OpenCV 3.4.3,3.4.4,4.0.0)
https://qiita.com/dandelion1124/items/eae435e601fba2adb0d1
g++ -I/usr/local/include/opencv4 test.cpp
本当にこれでよいのか?とりあえずインクルードは通るがまだエラーはでる。
Mat image = imread("xxxx.bmp");の行を消せばコンパイルは通る。
ライブラリパスを指定する。
g++ -I/usr/local/include/opencv4 -L/usr/local/lib test.cpp
これでもエラーが変わらず。
/usr/local/libにあるすべてのOpenCVのライブラリを-lで指定。
g++ test.cpp -I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_cudabgsegm -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn -lopencv_ml -lopencv_shape -lopencv_stitching -lopencv_cudafeatures2d -lopencv_superres -lopencv_cudacodec -lopencv_videostab -lopencv_cudaoptflow -lopencv_cudalegacy -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_photo -lopencv_imgcodecs -lopencv_cudawarping -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_video -lopencv_objdetect -lopencv_imgproc -lopencv_flann -lopencv_cudaarithm -lopencv_core -lopencv_cudev
これでコンパイルができた。オプションも -I -L -lの順番じゃないと(なぜか)ダメだった
いちいちライブラリを個別で指定しなくてもpkg-configを使えばよいらしいが、今回の手順では使えなかった。追加で何か設定が必要?
g++ `pkg-config --cflags --libs opencv4` test.cpp