この投稿はOpenCV Advent Calendar 2017の5日目の記事です。
はじめに
Visual C++でOpenCVの開発環境を構築する段階で躓いている人をまれによく観測します。(日本語おかしい
この記事では、確実(?)で簡単に導入できる方法を紹介します。
Vcpkgとは?
VcpkgはVisual C++向けのライブラリを管理するパッケージ管理システムです。
CMakeベースのパッケージ管理システムになっており、GitHubでオープンソースで開発されています。
このVcpkgを利用することで、様々なライブラリを簡単に導入することができます。
インストールやプロジェクトの設定などライブラリごとに異なるこれらの作業をすべてVcpkgのコマンドで行うことができます。
VcpkgはVisual C++ 2017とVisual C++ 2015(、Visual Studio 2013)に対応しています。
BoostやOpenCV、PCLをはじめ、すでに400以上のライブラリをサポートしています。
サポートしているライブラリはportsディレクトリやvcpkg searchコマンドで参照できます。
以下の動画を視聴するとなんとなく雰囲気がつかめると思います。
Vcpkg demo https://t.co/Kr2iXSenjw
— ゆるふわUnaさん (@UnaNancyOwen) 2017年11月30日
Vcpkg a tool to build open source C++ libraries https://t.co/pk3X0nH95V
— ゆるふわUnaさん (@UnaNancyOwen) 2017年12月2日
Vcpkgを使用してOpenCVを導入する
Vcpkgを導入する
まずはVcpkgを導入しましょう。
バッチファイルを実行するだけなので簡単に導入できますね。
-
Vcpkgをダウンロード、任意の場所に展開する(e.g.
C:\vcpkg
)
GitHubのMicrosoft/Vcpkgからダウンロードすることができます。
vcpkg\bootstrap-vcpkg.bat
を起動すると自動的にビルドされます。
ビルドが正常に完了するとvcpkg\vcpkg.exe
が生成されます。
```ps1
.\bootstrap-vcpkg.bat
```
必須ではありませんが、環境変数Pathを設定しておくと便利でしょう。*1
<table>
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
<tr>
<td>Path</td>
<td>;C:\vcpkg</td>
</tr>
</table>
3. **Vcpkgが正常にインストールされているかどうか確認する** PowerShellを開いて
.\vcpkg
コマンドを実行してみましょう。
コマンドの例が表示されたら正常にインストールできています。
```ps1
.\vcpkg
```
![2017-11-30_23h04_00.png](https://qiita-image-store.s3.amazonaws.com/0/34834/cec11c89-f2b0-a239-df84-7dae8eecb063.png)
OpenCVをインストールする
さっそく、OpenCVをインストールしましょう。
Vcpkgのコマンドを1つ実行、しばらく待つだけで簡単にインストールできます。
-
Vcpkgを使用してOpenCVをインストールする
PowerShellを開いて.\vcpkg install opencv
コマンドを実行してみましょう。
これだけで、OpenCVが依存ライブラリと共にビルド・インストールされます。簡単ですね。.\vcpkg install opencv
プロジェクトを作成する
この段階で躓く人が多いのではないでしょうか?
「プロパティのこの項目を開いて…」なんて複雑な設定をする必要はありません。
ここでは2つの方法を紹介します。たったこれだけで、あとはプログラムを書くだけです。簡単ですね。
-
Vcpkgのコマンドを利用する方法
一度だけ.\vcpkg integrate install
コマンドを実行します。
すべてのVisual C++のプロジェクトで、特別な設定をすることなくVcpkgでインストールされたライブラリを利用することができるようになります。
新規に作成したプロジェクトはもちろん、既存のプロジェクトに設定するときにも便利です。.\vcpkg integrate install
* **CMakeでプロジェクトを生成する方法** [OpenCV Advent Calendar 2017 1日目](https://qiita.com/tomoaki_teshima/items/cbdee2866b6f344a90d0)の記事を読んだ方はすでにCMakeを使っていますね?使っていますね? CMakeはCMakeListsをもとに設定済みのプロジェクトを生成します。 これまで利用していたCMakeListsに
CMAKE_TOOLCHAIN_FILE
の設定を加えるだけでfind_package()
はVcpkgでインストールされたライブラリを探索します。
```cmake
set( CMAKE_TOOLCHAIN_FILE "C:/vcpkg/scripts/buildsystems/vcpkg.cmake" )
```
コマンドラインでCMakeを使用している場合は、同じオプションを渡しても大丈夫です。
```ps1
cmake -DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake"
```
プログラムを実行する
プログラムをビルドすると、VcpkgがPost-Build Eventに設定したコマンドにより、プログラムの実行に必要な依存ファイル(opencv_core<version>.dll
など)が実行ファイルのディレクトリにコピーされます。
そのため、「環境変数Pathにパスを通して…」なんて特別な設定をする必要はありません。そのまま実行することができます。
まとめ
Vcpkgを使ってOpenCVを導入する方法を紹介しました。
なんとなく1つ2つコマンドを打つだけで、いい感じにインストールして設定までしてくれます。(易しい!
(少し古いですが、)基本的なドキュメントは日本語でも提供されています。
Vcpkgは執筆現在も活発に開発されており、日々改善が続けられております。
なにか困ったことがあったら気軽にissuesに投稿してみましょう。
RobertやAlexanderがなんとかしてくれるでしょう。
明日のOpenCV Advent Calendar 2017は、いつも美味しそうなお酒とおつまみ(と論文?)の写真がTLに流れてくるmiyazakishogun先生です。
Vcpkgの基本的なコマンドの解説(おまけ)
vcpkg install <package>[features]:<triplet> --featurepackages
/ vcpkg remove <package>:<triplet>
パッケージをインストール・アンインストールする。
デフォルトではx86-windows
(x86, dynamic link library)の設定を使用する。
-
package … パッケージの名前(e.g.
opencv
) -
features … [省略可能]有効にする機能(e.g.
[ffmpeg,vtk]
) -
triplet … [省略可能]ビルド構成の設定(e.g. x64, dynamic link library
x64-windows
)
Vcpkgではデフォルトで以下のTripletsが用意されています。(vcpkg/triplets
)
- x86-windows
- x86-windows-static
- x64-windows
- x64-windows-static
ツールセットを明示的に指定する場合、tripletファイルにVCPKG_PLATFORM_TOOLSET
を設定します。
# Visual Studio 2015 (v140)
set( VCPKG_PLATFORM_TOOLSET v140 )
vcpkg integrate install
/ vcpkg integrate remove
すべてのプロジェクトでライブラリを利用できるように設定・解除する。
vcpkg list
インストールされているパッケージ一覧を表示する。
vcpkg search <keyword>
対応しているパッケージ一覧を表示する。また、キーワードで検索することができる。
-
keyword … [省略可能]検索文字列(e.g.
opencv
)
*1 環境変数Pathを設定しない場合は、コマンドを実行する前にカレントディレクトリをVcpkgのルートディレクトリに移動してください。(e.g. cd C:\vcpkg
)また、PowerShellではコマンドの前に.\
を付ける必要があります。(e.g. .\vcpkg
)