- c++でOpenCVを使いたくなったので、インストールしてみました。備忘録として、書き残します。
- 環境:Ubuntu18.04、 OpenCV3.4.6 になります。
1. 動機
- 今のPCで C++でOpenCVを使いたくなった
- Python環境では、最新の4.1を使ってます。(pipによるバージョン管理もできて楽だなぁ)
- やりたいことがあって、パフォーマンスを要するのと、書き慣れたC++で素早く書きたくなったため。
- インストール手順を残したい
- 現状、開発マシンにはC++版は2.4.11 が入ってるが、どうやって入れたのかは不明。
- 手順を残しておけば…。手順を残すのも動機の1つ。
- 4.1がリリースされた今、2.系を使い続けるのもね。
- ということで、バージョンアップに踏み切る決心を付けました。
- 結果を先に言うと、4.1狙ったがビルドできず、3.4.6を入れました。
2. 開発環境
3. 手順
3.1 概要
- 現状の2.4.11のアンインストール
- 最新版ソースをgitから落とす
- ビルド、インストール
- 最後は動作確認で閉める
- 参考サイト
3.2 古いバージョンの削除
- 正直、正しいやり方がわからない…。
- [2]を参考に、手作業でファイルを消していった。
- 最初に調査として、ライブラリ等がどこに入っているかを調べた
ディレクトリ |
ファイル |
説明 |
/usr/lib |
libopencv_**.so |
ライブラリファイル |
/usr/include/opencv, /opencv2 |
.h, .hpp |
ヘッダファイル |
/usr/lib/pkg-config |
opencv.pc |
pkg-config |
- OpenCV関連のファイルをrmコマンドを使って、とことん消した。
- cmakeとかmakeをしたopencv/build/の中で、下記コマンドでもいいらしい
$ sudo make uninstall
- が、いかんせん今のバージョンのビルドの記憶がないので…。
- このあたりは[3]を参考にしました。
3.4 ビルドに必要なパッケージの準備
apt-get -y install build-essential checkinstall cmake unzip pkg-config yasm
apt-get -y install git gfortran python3-dev
apt-get -y install libjpeg8-dev libjasper-dev libpng12-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2-dev libv4l-dev
apt-get -y install libjpeg-dev libpng-dev libtiff-dev libtbb-dev
apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libatlas-base-dev libxvidcore-dev libx264-dev libgtk-3-dev
$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
- だいたい、[2]を包含している[1]を実行した。ちなみに[1]は先に、
sudo su -
してます。
- ただし、libjasper-dev が見つからないと言ってきた。JPEG2000のRead/Writeに必要らしいが、使わないので無視した。
3.3 ダウンロード
- OpenCVのReleaseページにアクセス、ダウンロード
- Github ボタンを押せば、githubサイトに飛びます。
- ダウンロード先
- [1]だと、
/usr/local/src
に置くように言っていますが、決まりはないようです。
- 実際、ここにダウンロードしたが、ビルドすると5GB程度に膨れ上がり、自分のPCでは、ストレージ残量の問題でビルド中断となった…
- なので、自分はSDカード(/media)に置きました
3.4 インストール
- 解凍
- cmake の準備
- 解凍した
/opencv
に移動しmkdir build
で、ビルド用のディレクトリを作り、そこに移動します。cd build
- cmake
/build
内で下記コマンドを打つ
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_V4L=OFF ..
- 上記で
/usr/local
にビルド生成物が作られます
- 今回は、[1][2]でも書いてあるような、contribのビルドはパスしました。
- 詳しくはここのissueが参考になります。
- そういえば、
sys/videoio.h not found
って出たので、ここも参考にしてた。
- make
/build
のままで、make -j4
でmakeします。そこそこに時間がかかったような。
- オプションの意味はこちら
- 同時に実行できる jobs (コマンド) の数を指定する。 -j オプションが複数個指定された場合は、最後の指定が有効になる。引き数無しで -j オプションが与えられた場合、 make は同時に実行できるジョブの数を制限しない。
- インストール
sudo make install
で実行。
- 意味合いとしては、makeしたファイル群をディレクトリにコピーするってことです。
- configファイルの設定
- この作業、よく分かってないが…[1]に書いてあった。
echo /usr/local/lib > /etc/ld.so.conf.d/opencv.conf
ldconfig -v
3.5 動作確認
- バージョン確認
opencv_version
と打つと 3.4.6
って出たよ。
- これ、
which opencv_version
とすると、/usr/local/bin/opencv_version
と出てっきた。インストールされてたのね。
$ pkg-config --modversion opencv
これでも確認できます。
- サンプルコードで確認
4. おわりに
- 以上で終わりです。
- まだ、修正必要な部分があるかもだが、一旦閉じます。
5. 追記(contribの追加ビルド)
- 後から contrib が必要となったので、追加でインストールから、cmake、 make を実行しようとするも、cmake でエラーが出て進めず
- いろいろ試したところ、以下の手順でやったらビルド、インストールまで完了した。
- 一旦、先にビルドした時に作った /build を削除
- cmake で
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules
を追加
- 以上です。
6. 追記その2 (SIFT,SURFを使うため)
- 上記で、contrib を追加したのは、SIFT/SURF(今更?)を使いたかったため
- いざ使おうと思ったら、
OPENCV_ENABLE_NONFREE
のオプションつけて CMAKE やり直しせ って警告が。親切ですね。
- ということで、再度cmakeから。
- 上記の追記と同様に、ダウンロードし、解凍したOpenCVフォルダに作ったbuild を削除
- 再度 build ディレクトリを作って中に入り下記で cmake
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_V4L=OFF -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.6/modules ..