siar

Snowy Institute

OpenCV (安定版)を入れてみた

新しいPCにOpenCVをインストールしたときのメモです.

公式ページを参考にしました. OpenCV: Installation in Linux

環境とか

OS: Ubuntu 16.04.4 LTS

入れるもの: OpenCV 3.4.1 (Stable)

インストール

必要なものを突っ込む

多分全部標準で入っていますが, 念の為以下を動かしました.

$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

必須パッケージはこれだけですが, 他にオプションとしていくつかのパッケージが提案されていました. オプションパッケージがそれぞれ何に使われるのか不明だったので, 簡単に調べた内容をまとめておきます.

パッケージ名 役割
python-dev OpenCVPythonで使う用
python-numpy 同上
libtbb2 Threading Building Blocks, C++をマルチスレッドで動かすため
libtbb-dev 同上
libjpeg-dev JPEG形式ファイルを扱えるようにするCライブラリ
libpng-* PNG形式ファイルを扱えるようにするCライブラリ (バージョンが色々ある, libpng16-devが最新?)
libpng++-dev libpngのC++向けインターフェース
libtiff* TIFF形式ファイルを扱えるようにするCライブラリ(libtiff5-devが最新?)
libjasper-dev JPEG 2000を扱えるようにするCライブラリ
libdc1394-22-dev IEEE1394規格に準拠したカメラを使う用 (このパッケージだけじゃ足りない説も?)

調べ方が適当ですのでこんなものでご容赦を.

ソースコードを手に入れる

安定版は以下のリンクから落としました. Releases - OpenCV library

好きなバージョンのSourcesを落として展開します.

cmakeする

展開した場所まで入り, buildという名前のディレクトリを作って中に入ります.

$ mkdir build
$ cd build

cmakeします.

$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

ここでエラー発生.

FATAL: In-source builds are not allowed.

You should create a separate directory for build files.

何もわからないので, 調べます.

どうやらCMakeCache.txtを消せとありました. 消します.

$ cd ..
$ rm CMakeCache.txt
$ cd build/

再度挑戦します.

$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

無事通ったようです. 時間がかかる(今回は15分程度かかった)ので気長に待ちましょう.

参考

曰く, -Dの後の空白が悪さをすることもあるらしいです. その場合は以下を.

$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..

makeする

makeします.

$ make -j8

並列数は自由です. 10分程度かかりました.

最後です.

$ sudo make install

任務完了です.

動作確認

適当な場所に画像を置きます. 同じ場所にtest.cppとかいうC++ファイルを生成します.

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>

int main() {
    cv::Mat m = cv::imread("sample.png", 1);
    cv::namedWindow("sample", cv::WINDOW_AUTOSIZE);
    cv::imshow("sample", m);
    cv::waitKey(0);
    cv::destroyAllWindows();

    return 0;
}

画像ファイル名は任意です.

コンパイルする前にパスを通します.

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

~/.bashrcに書いてしまってもいいかもしれません.

コンパイルします.

$ g++ test.cpp -lopencv_core -lopencv_imgcodecs -lopencv_highgui

実行します.

$ ./a.out

画像が表示されれば勝ちです.