(2020.11.25 作成)
画像処理関係の分野で有名なライブラリであるOpenCVについてのビルド方法について紹介したいと思います。ビルド済みのバイナリを公式サイトからダウンロードできるのですが、ここではQtを組みこんで自力でビルドする方法を紹介したいと思います。
Qtを組み込む目的ですが、下図の様に画像を表示した後にマウスで画像を拡大すると各画素データが表示されるようになるので画像処理関係の開発を行うにはとても便利だからです。
ここで紹介している方法は基本的に公式サイトのTutorialを参考にしているものです。以下の説明と併せてご確認ください。また、いくつかの情報についてはこちらのサイトも参考にさせていただきました。韓国語ですがGoogle翻訳で読めるようになります。また、ここ以外の多くのサイトでもビルド方法は紹介されていると思いますので、一例だと思ってご参考にされてください。文字ばかりで申し訳ないですが、管理人の忘備録だと思っていただければと思います。
なおここで紹介しているOpenCVのバージョンはV4.5.0です。また管理人はArduino/Pythonが嫌いなのでC++で使用することしか考えていません。
ビルド環境はWin10 64bit, Visual studio 2019です。
せっかくQtを組み込むのですからついでに役に立ちそうなライブラリも組み込むようにします。以下管理人が組み込んだライブラリのダウンロード先などの情報です。
なにをするにもまずOpenCV本体のダウンロードです。こちらのサイトから右側のReleaseと書いてあるところから最新の安定版ソースをダウンロードします。extra moduleであるcontribを使用する場合はこちらのサイトからダウンロードします。
使用するコンパイラに合わせたプロジェクトを作成してくれるソフト?だと思っています。こちらからダウンロードできます。
行列演算ライブラリらしいですが、全くわかっていません。簡単に導入できてトラブルも少ないので毎回入れています。こちらからダウンロードできます。
この機能が使いたくて毎回Qt込みでビルドをしているのですが、毎回ダウンロード先が分からなくて混乱します。なので本記事執筆時点でのトップページからのたどり着き方をここでは紹介します。
まず、一番下のOpen source → 下の方にある looking for qt binaries → Download the qt installer → view other optionを選んでoffline installerを選択 → 5.12.x Offline installer
以前はQt アカウントを作成せずとも使えたようだが、今は入力しないとダメっぽい。諦めてアカウント作成。インストール時はMSVC 2017 64-bitのみにチェックを入れて他はすべてチェック不要です。
並列計算をしてくれるライブラリです。トップページからOpen source versionを選択。githubに飛ぶので右側のReleaseから最新版をダウンロードします。
IPPも並列計算をしてくれるライブラリだと思います。TBBとの違いはよくわかっていませんが、TBBより簡単に使えたような気がします。トップページからStand-Alone versionを選択し、ユーザー登録してダウンロードします。MKLは数値演算ライブラリらしいです。
管理人の環境ではウィルス対策ソフトが邪魔をしてユーザー登録画面がうまく表示されませんでした。また、登録後はIntelからメールが届くようになるので迷惑だと感じるならIPPの導入をあきらめるのも手だと思います。
OpenBLASも使えるようになるらしく、頑張ってみたのですが管理人の浅はかな知識では太刀打ちできませんでした。。。
cmakeを実行してプロジェクトを作成します。ダウンロードしたopencv-4.5.0フォルダをしてconfigureボタンを押す。しばらく待つと追加ライブラリを設定できるようになるので、各ライブラリを設定します。
各ライブラリの設定パスは今回は以下の通りでした。またパス文字は\マークだと認識してくれないので/マークへ変更します。
Qt5dir C:\Qt\Qt5.12.9\5.12.9\msvc2017_64\bin
TBB_DIR: 使用しない
TBB_ENV_INCLUDE: <保存Dir>/include
TBB_ENV_LIB: <保存Dir>/lib/intel64/vc14/tbb.lib
TBB_ENV_LIB_DEBUG: <保存Dir>/lib/intel64/vc14/tbb_debug.lib
EIGEN_INCLUDE_PATH: /eigen-3.3.8
MKL_WITH_TBBにチェック
MKL_INCLUDE_DIR:
C:\Program Files (x86)\IntelSWTools
\compilers_and_libraries_2020.4.311\windows\mkl\include
MKL_ROOT_DIR:
C:\Program Files (x86)\IntelSWTools
\compilers_and_libraries_2020.4.311\windows\mkl
全てのオプションの設定が終わりGenerateボタンを押すと指定した保存先にVisual studio用のプロジェクトファイルが作成されます。
サイトによってはALL_BUILDをビルドすればいいと書いてありますが、これを実行するとすべてのコンポーネントのビルドを始めるので、何か失敗していた時に時間がかかって大変です。そこで最初はopencv_coreなどどれか一つを選んでビルドエラーが出ないことを確認したほうが良いと思います。
ここで何も問題を起こさなければDebug/ReleaseでそれぞれALL_BUILDを行ってコンポーネント全てをビルドします。
ビルドが終了すると次はINSTALLをビルドするとInstallフォルダが作成されて必要なファイルがそこに格納されます。
基本的には公式チュートリアルの通り実行すればよいと思います。
まずは環境変数
OPENCV_DIR: <インストールフォルダ>\install\x64\vc16
を追加します。
次にチュートリアルではパスに"%OPENCV_DIR%\bin"を追加するように書かれています。しかしこの通りパスに記載するとOpenCVを使用したDLLを作成してC#からデバッグ実行する際にエラーが発生したので環境変数PATHには絶対パスで指定したほうがいいです。
チュートリアルでは次にプロパティシートを作成するように書かれています。これはOpenCVを使用したプロジェクトごとにC++の設定を行う必要がなくなるためぜひ行った方が良い設定です。
最後に公式チュートリアル通りのテスト実行を行うとTBBがないだのQtがないだの文句を言われますので、パスの通った場所に問題を起こしたDLLを配置して終了です。管理人の場合はOpenCVのDLLと同じところに放り込むようにしています。
ふぅ~。お疲れさまでした。ビルドをするだけで一日仕事になってしまいますが、一度作ると次のバージョンアップまでは使えるので、頑張ってやってみるのも良いと思います。
ではでは