LoginSignup
5
3

More than 3 years have passed since last update.

DebianにOpenCV4.1.1の環境を構築しC++で利用

Last updated at Posted at 2019-10-15

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」の通りに進めていく。

一応転記していく

必要なソフトウェアをインストールしていく

compiler
sudo apt-get install build-essential
required
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
optional
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++のコードは以下

test.cpp
#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
5
3
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
5
3