WindowsでOpenCVとopencv_contribをビルド&インストールする
自分の環境構築ついでに、研究室の後輩に向けて書いた記事です。
この記事ではC++から使うためにOpenCVとopencv_contribをソースコードからビルドしてインストールする方法を紹介します。 OSはWindowsを対象としています。
もくじ
0. 筆者の環境
一応、筆者の環境を書いておきます。 Visual StudioやOpenCVのバージョンが違ってもおそらくこの方法でインストールできると思います。
Windows 10 Home Visual Studio Community 2017 Visual C++ SDK : VC15 OpenCV 3.4.1 OpenCV contrib 3.4.1 CMake 3.11.0 Git for Windows 2.17.0
1. 前置き
1.1. 比較的簡単なインストール方法
OpenCVにはいくつかのインストール方法があります。 比較的、簡単な方法として挙げられるのは、
- ビルド済みのライブラリファイルをダウンロードしてくる方法(ここから:Source Forge)
- Visual StudioのパッケージマネージャであるNugetを使ってダウンロードしてくる方法
の2つでしょう。
1の方法はこちらのサイトなどが参考になると思います。 ただし、この方法ではopencv_contrib(開発中だったり特許が絡んだりといった諸々の都合でOpenCV本体から分離しておきたい機能を内包したパッケージ)が含まれてないため、一部の機能を使うことができません。 DNN、顔認識、空間コード法などcontribに含まれる機能を使わないのであれば、この方法でインストールしてしまって構わないと思います。
2の方法については、いくつか記事があるようなので「opencv nuget」などで検索してみてください。
OpenCV3
, opencvcontrib
というパッケージをインストールすればcontribも含めた一通りの機能が使えるようになります。
ただし、OpenCVのNugetパッケージはあまり頻繁にはメンテナンスされていません。 そのため、最新のVisual StudioやVisual C++ SDKを使っている場合、プロジェクトの設定を自分で調整したり、追加のSDKをダウンロードしたりといった作業が必要になることがあります。 また、最新のOpenCVにしか入っていないような機能を使いたい場合、このインストール方法は使えません。
1.2. ビルドによるインストール
もうひとつのインストール方法はOpenCVとopencv_contribをソースコードからビルドするというものです。 この記事ではこちらの方法を紹介します。 なお、より詳細な情報は公式ドキュメント にまとめられているので、必要に応じて参照してください。
2. インストール手順
2.1. CMakeをインストールする
CMakeは使っている環境(OSとかコンパイラとか)に合わせたプロジェクトファイルを作成するためのツールです。 クロスプラットフォームなプロジェクトを管理できることからC++のOSS開発ではよく利用されています。 CMakeの詳細は別の記事で紹介しているので余裕があれば読んでみてください(勝手に作るCMake入門 その1 基本的な使い方 - かみのメモ)。
OpenCVもCMakeプロジェクトとして開発されているのでこれを利用してビルドします。
まずこちらのページにアクセスしてCMakeのインストーラーをダウンロードしましょう。
64ビットOSを使ってるときは~~_x64.msi
、32ビットOSを使ってるときは~~_x86.msi
という名前のものを選択してください。
次にインストーラーを起動し、CMakeをインストールします。 このとき、下の図のようにCMakeのPATHを通しておきましょう。
2.2. Git for Windowsをインストールする
Gitはソースコードの変更履歴を管理したり、他のマシンと共有したりするためのツールです。
こちらのページにアクセスして、インストールしましょう。
インストール時の選択肢はすべてデフォルトのままでいいと思います。
2.3. ディレクトリの準備
次にOpenCVをインストールするディレクトリ(フォルダ)を準備します。
特にこだわりがなければCドライブ直下にopencv
というディレクトリを作ればいいと思います。
以降C:\opencv
を用意した前提で説明を進めます。
ディレクトリを作成したらその中に入り「右クリック->Git Bash Here」でGit Bashを起動します。 黒い画面が出てきたらOKです。
2.4. ダウンロード・ビルド用のスクリプトを用意する
今回の記事では、作業を簡単にするためshellスクリプトを利用します。
まずGit Bashの画面でtouch install.sh
のコマンドを実行し、install.sh
というファイルを作成します。
次に、作成したファイルを適当なテキストエディタで開きます。 メモ帳を使う場合は、エクスプローラーから「右クリック->プログラムから開く->その他のプログラム->メモ帳」で開けます。
開いたファイルに以下のスクリプトを貼り付けます。
#!/bin/bash -e myRepo=$(pwd) CMAKE_CONFIG_GENERATOR="Visual Studio 15 2017 Win64" if [ ! -d "$myRepo/opencv" ]; then echo "clonning opencv" git clone https://github.com/opencv/opencv.git mkdir -p Build mkdir -p Build/opencv mkdir -p Install mkdir -p Install/opencv fi pushd opencv git checkout master git pull --rebase git checkout refs/tags/4.0.1 popd if [ ! -d "$myRepo/opencv_contrib" ]; then echo "clonning opencv_contrib" git clone https://github.com/opencv/opencv_contrib.git mkdir -p Build mkdir -p Build/opencv_contrib fi pushd opencv_contrib git checkout master git pull --rebase git checkout refs/tags/4.0.1 popd RepoSource=opencv pushd Build/$RepoSource CMAKE_OPTIONS='-DBUILD_PERF_TESTS:BOOL=OFF -DBUILD_TESTS:BOOL=OFF -DBUILD_DOCS:BOOL=OFF -DWITH_CUDA:BOOL=OFF -DBUILD_EXAMPLES:BOOL=OFF -DINSTALL_CREATE_DISTRIB=ON' cmake -G"$CMAKE_CONFIG_GENERATOR" $CMAKE_OPTIONS -DOPENCV_EXTRA_MODULES_PATH="$myRepo"/opencv_contrib/modules -DCMAKE_INSTALL_PREFIX="$myRepo"/install/"$RepoSource" "$myRepo/$RepoSource" echo "************************* $Source_DIR -->debug" cmake --build . --config debug echo "************************* $Source_DIR -->release" cmake --build . --config release cmake --build . --target install --config release cmake --build . --target install --config debug popd
※ 初回実行時に指定バージョンにcheckoutしないバグを修正しました(2019/01/22)
2行あるgit checkout refs/tags/4.0.1
の行は自分がインストールしたいバージョンに合わせて書き換えてください。
タグの一覧はこちらから確認できます。
この行を消すと最新の開発中のバージョンがビルドされます。
CMAKE_CONFIG_GENERATOR="Visual Studio 15 2017 Win64"
の部分は自分のPCのOSとインストールされているVisual Studioのバージョンに合わせて変更してください。
cmake --help
とコマンドを打てば、利用できるGeneratorの一覧を確認することができます。
CMAKE_OPTIONS=...
の部分はビルド時の設定を行っています。
ここでは最もシンプルな設定にしています(詳細な設定が必要な場合はshellスクリプトではなくCMake GUIを使う方法が楽かもしれません、公式ドキュメントや他の記事を当たってみてください)。
貼り付けたらファイルを保存します。
2.5. スクリプトを実行する
Git Bashで./install.sh
とコマンドを実行すると、ソースコードのダウンロード・ビルドが開始されます。
ビルドは10分以上かかるので気長に待ちましょう。
ビルドが終わったとき、install/opencv/x64/vc15
にbin
とかlib
みたいなフォルダができ、中にopencv_world401.dll
とかopencv_world401.lib
とかが作られていればOKです(環境によって若干フォルダ名・ファイル名が変わります)。
また、opencv_world401d.dll
のようにd
が付記されているファイルはDebug情報込みでビルドされたファイルです。
最後にC:\opencv\Install\opencv\x64\vc15\bin
をPATHに追加しておきましょう。
3. テストプログラム
Visual Studioで「Visual C++->Windowsコンソールアプリケーション」のプロジェクトを作成します。
「プロジェクト->プロパティ」を開いて以下の作業をします。
- 構成・プラットフォームにRelease・x64(Win32でビルドした場合はx86)を選択
- 「構成プロパティ->C/C++->全般->追加のインクルードディレクトリ」に
C:\opencv\Install\opencv\include
と記入 - 「構成プロパティ->リンカー->すべてのオプション->追加の依存ファイル」に
C:\opencv\Install\opencv\x64\vc15\lib\opencv_world401.lib
と記入(Debug情報込みでビルドする場合はopencv_world401d.lib
)
次に以下のようなプログラムを書きます。 opencv_contribに含まれるグレイコードのライブラリを使って計測パターン画像を作成・表示するプログラムです。
#include "stdafx.h" #include <vector> #include <opencv2/opencv.hpp> #include <opencv2/highgui.hpp> #include <opencv2/structured_light.hpp> int main() { cv::structured_light::GrayCodePattern::Params params; params.width = 32; params.height = 32; std::vector<cv::Mat> patternImgs; auto graycode = cv::structured_light::GrayCodePattern::create(params); graycode->generate(patternImgs); cv::namedWindow("Pattern", cv::WINDOW_NORMAL); cv::resizeWindow("Pattern", 512, 512); for (auto img : patternImgs) { cv::imshow("Pattern", img); cv::waitKey(500); } return 0; }
プログラムが書けたら、画面上中央のソリューション構成をx64(Win32でビルドした場合はx86)に設定してビルド・実行します。
こんなかんじのパターンが表示されたら成功です。
4. おわりに
OpenCV関連ではこんな記事↓も書いてるので読んでもらえると筆者が喜びます。
公式ドキュメントではDebug/Release両方をビルドするスクリプトが書いてあるが、インストール先が同じなので上書きされてしまっている模様(ドキュメントが追従できていない?)。
とりあえずOpenCVのDebug Infoはいらないだろうって割り切って、Releaseだけをビルドするかんじで紹介記事を書きました。
勘違いでした。
Debugビルドの成果物はopencv_world401d.dll
のようにd
を付記したファイル名で作成されているようです(2018/10/27 修正)。