画処理おじさんの徒然日記

画処理おじさんの徒然日記

画像処理や一眼レフカメラに関して書きます。試したことの備忘録的に。

Ubuntu に OpenCV をインストールした

UbuntuOpenCV をインストールした

  • c++OpenCVを使いたくなったので、インストールしてみました。備忘録として、書き残します。
  • 環境:Ubuntu18.04、 OpenCV3.4.6 になります。

1. 動機

  • 今のPCで C++OpenCVを使いたくなった
    • Python環境では、最新の4.1を使ってます。(pipによるバージョン管理もできて楽だなぁ)
      • ちょっとしたことを試すなら、Pythonでも良いかと。
    • やりたいことがあって、パフォーマンスを要するのと、書き慣れたC++で素早く書きたくなったため。
  • インストール手順を残したい
    • 現状、開発マシンにはC++版は2.4.11 が入ってるが、どうやって入れたのかは不明。
    • 手順を残しておけば…。手順を残すのも動機の1つ。
  • 4.1がリリースされた今、2.系を使い続けるのもね。
  • ということで、バージョンアップに踏み切る決心を付けました。
  • 結果を先に言うと、4.1狙ったがビルドできず、3.4.6を入れました。

2. 開発環境

3. 手順

3.1 概要

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 ビルドに必要なパッケージの準備

  • [1]の方だと、以下が必要となってた。
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
  • [2]の方では、下記のみ。
$ 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サイトに飛びます。
    • git clone でもいいんだけど、タグの設定方が分からぬ。タブを指定して、zipで落としました。
    • opencvここ
    • opencv_contribはここ
  • ダウンロード先
    • [1]だと、/usr/local/src に置くように言っていますが、決まりはないようです。
    • 実際、ここにダウンロードしたが、ビルドすると5GB程度に膨れ上がり、自分のPCでは、ストレージ残量の問題でビルド中断となった…
    • なので、自分はSDカード(/media)に置きました

3.4 インストール

  • 解凍
    • unzipで
  • 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 ..
  • 成功したら make します
  • 以上です。