71
53

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenCVAdvent Calendar 2018

Day 1

OpenCVインストール構成の変遷(OpenCV 3.4.3,3.4.4,4.0.0)

Last updated at Posted at 2018-11-30

はじめに

みんなが心待ちにしていたOpenCV 4.0が先日リリースされましたね.また,ほぼ同タイミングでOpenCV 3.4.4もリリースされました.これらのバージョンでこれまでとOpenCVのインストール構成が変わっていることにたまたま気付いたので情報共有も兼ねて記事にしたいと思います.

動作確認環境

筆者は以下の環境で動作確認しました.

OS

  • Ubuntu 18.04 64bit

CMake

  • 3.10.2

コンパイラ

  • gcc 7.3.0

OpenCV

インストール構成の違い

以降はCMAKE_INSTALL_PREFIXがデフォルト(/usr/local)のままであることを前提に説明します.

OpenCV 3.4.3 vs OpenCV 3.4.4

OpenCV 3.4.3,OpenCV 3.4.4での各種インストール構成を下表にまとめます(太字の箇所が変更点).

OpenCV 3.4.3 OpenCV 3.4.4
インクルードパス /usr/local/include/opencv
/usr/local/include/opencv2
/usr/local/include/opencv
/usr/local/include/opencv2
ライブラリパス /usr/local/lib /usr/local/lib
Pythonライブラリパス /usr/local/lib/python3.6/dist-packages /usr/local/python/cv2/python-3.6
バイナリ(アプリ) /usr/local/bin /usr/local/bin
OpenCV_DIR /usr/local/share/OpenCV /usr/local/share/OpenCV

あー,3.4.4からPythonライブラリパスが謎の場所に移動しているのでPYTHONPATHを通す必要があるわけですね(初見殺しなのでやめて).

気付かないと漏れなくこういうことになります.

OpenCV 3.4.4 vs OpenCV 4.0.0

OpenCV 3.4.4,OpenCV 4.0.0での各種インストール構成を下表にまとめます(太字の箇所が変更点).

OpenCV 3.4.4 OpenCV 4.0.0
インクルードパス /usr/local/include/opencv
/usr/local/include/opencv2
/usr/local/include/opencv4/opencv2
ライブラリパス /usr/local/lib /usr/local/lib
Pythonライブラリパス /usr/local/python/cv2/python-3.6 /usr/local/python/cv2/python-3.6
バイナリ(アプリ) /usr/local/bin /usr/local/bin
OpenCV_DIR /usr/local/share/OpenCV /usr/local/lib/cmake/opencv4/

という感想が出てもおかしくない大変歪なディレクトリ構成になっていることがわかります(OpenCV 2.xのタイミングでインクルードディレクトリをopencv2としてしまった罪は重い・・・).また,OpenCV 4.0.0からC APIが削除されたので/usr/local/include/opencvがなくなっています.

さらにOpenCV 4.0.0からOpenCV_DIRも変わっているのでCMakeでfind_package(OpenCV)としたときにちゃんと検出してくれるのか不安で眠れなくなる読者もいるかもしれません.結論から述べるとCMAKE_INSTALL_PREFIXがデフォルト(/usr/local)のままであればこんな感じで特に問題無く検出してくれます(やったね!).


-- Found OpenCV: /usr/local (found version "4.0.0")

ただし,OpenCVのビルド時にCMAKE_INSTALL_PREFIXをカスタマイズした場合,OpenCVを使ったプログラムのCMake実行時に以下のオプションを付与する必要があります(最初,OpenCVConfig.cmakeがどこに配置されているのかわからなくて混乱した・・・).

-D OpenCV_DIR=${CMAKE_INSTALL_PREFIX}/lib/cmake/opencv4

おまけ(OpenCV 3系,OpenCV 4系両対応)

Transition guideにはOpenCV 2.4系,OpenCV 3系の両バージョンに対応する方法が記載されています.

OpenCV 3系はこれからもしばらく使われることが予想されるのでOpenCV 3系,OpenCV 4系両対応をこれまでと同じようにできるか不安で眠れなくなる読者もいるかもしれません.結論から述べるとこれまでと同様の対応で大丈夫です.以下にソースコード,CMakeレベルでの対応方法を示します.

ソースコード

#include <opencv2/core/version.hpp>

#if CV_MAJOR_VERSION == 3
// OpenCV 3系の処理を書く
#elif CV_MAJOR_VERSION == 4
// OpenCV 4系の処理を書く
#endif

CMake

find_package(OpenCV REQUIRED)

if(OpenCV_VERSION VERSION_LESS "4.0")
# use 3.x modules
else()
# use 4.x modules
endif()

おわりに

この記事ではOpenCV 3.4.3,3.4.4,4.0.0でのバージョン間のインストール構成の差異について紹介しました.この記事がOpenCV 4系へのスムーズな移行の助けになれば幸いです.
明日はtomoaki_teshimaさんの記事で,タイトルは「cv::waitKeyは遅いよね」となっています.とてつもなくテクい話が読めそうなのですごく楽しみです!!

71
53
2

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
71
53

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?