siar

Snowy Institute

OpenCVの入れ直し

入れたOpenCVで某を動かしたくなったのですが, 安定版3.4.1が対応しておらず虚無になったので入れ直しました. 対応バージョンはちゃんと調べましょう.(自戒).

いつも通り, 公式ページを参考にしました. OpenCV: Installation in Linux

古いもののアンインストール

これは本当に適当に消しました. 詳しい方にコメントを欲しいところです.

cmakeとかmakeをしたopencv/build/の中で

$ sudo make install
$ sudo make uninstall

を実行します. installの方は, 念の為です.

後は片っ端から消しました.

まずはmake uninstallしたソースディレクトリを丸ごと. 次に, 残骸を.

自分は/usr/localをインストール先に指定していたので, /usr/local/libusr/local/include内のopencvが付くものを全て消しました.

環境とか

OS: Ubuntu 16.04.4 LTS

入れるもの: OpenCV (Cutting-edge)

インストール

必要なものを突っ込む

もし入っていない場合は突っ込みます. 自分は安定版を入れるときに入っているのですっ飛ばしました.

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

その他オプションのライブラリとかの情報は下記のページに雑にまとめています.

ssr-yuki.hatenablog.com

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

開発中の最新版を突っ込みます.

GitHub - opencv/opencv: Open Source Computer Vision Library

自分は$HOME/lib以下にcloneしました.

$ git clone https://github.com/opencv/opencv.git

新しい拡張機能を体験したい場合は以下も.

GitHub - opencv/opencv_contrib: Repository for OpenCV's extra modules

こちらのclone先は, cmakeの際にpathを指定できるようなので自由みたいです. 今回私は同じ場所に入れています.

$ git clone https://github.com/opencv/opencv_contrib.git

cmakeする

/opencvに入り, buildという名前のディレクトリを作って中に入ります.

$ cd opencv
$ mkdir build
$ cd build

cmakeします.

$ cmake .. -DOPENCV_EXTRA_MODULES_PATH=$HOME/lib/opencv_contrib/modules -DCMAKE_INSTALL_PREFIX=/usr/local

拡張機能を入れていない場合は, 1つ目のオプションは不要です.

makeする

makeします.

$ make -j8

私の環境では15分程度でした. そして締めのインストール.

$ 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 -std=c++11 -lopencv_core -lopencv_imgcodecs -lopencv_highgui

C++11を指定しないと怒られてしまうので気をつけましょう.

実行します.

$ ./a.out

画像が表示されればOkです.