C++
OpenCV
VisualStudio
VisualC++
vcpkg
OpenCVDay 5

Vcpkgを使用してOpenCVを導入する

More than 1 year has passed since last update.

この投稿は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を使用してOpenCVを導入する

Vcpkgを導入する

まずはVcpkgを導入しましょう。
バッチファイルを実行するだけなので簡単に導入できますね。

  1. Vcpkgをダウンロード、任意の場所に展開する(e.g. C:\vcpkg)
    GitHubのMicrosoft/Vcpkgからダウンロードすることができます。

  2. Vcpkgをビルドする
    vcpkg\bootstrap-vcpkg.batを起動すると自動的にビルドされます。
    ビルドが正常に完了するとvcpkg\vcpkg.exeが生成されます。

    .\bootstrap-vcpkg.bat
    

    必須ではありませんが、環境変数Pathを設定しておくと便利でしょう。*1

    Variable Value
    Path ;C:\vcpkg


  3. Vcpkgが正常にインストールされているかどうか確認する
    PowerShellを開いて.\vcpkgコマンドを実行してみましょう。
    コマンドの例が表示されたら正常にインストールできています。

    .\vcpkg
    

    2017-11-30_23h04_00.png

OpenCVをインストールする

さっそく、OpenCVをインストールしましょう。
Vcpkgのコマンドを1つ実行、しばらく待つだけで簡単にインストールできます。

  1. Vcpkgを使用してOpenCVをインストールする
    PowerShellを開いて.\vcpkg install opencvコマンドを実行してみましょう。
    これだけで、OpenCVが依存ライブラリと共にビルド・インストールされます。簡単ですね。

    .\vcpkg install opencv
    

    2017-11-30_23h29_29.png
    2017-11-30_23h29_46.png

プロジェクトを作成する

この段階で躓く人が多いのではないでしょうか?
「プロパティのこの項目を開いて…」なんて複雑な設定をする必要はありません。
ここでは2つの方法を紹介します。たったこれだけで、あとはプログラムを書くだけです。簡単ですね。

  • Vcpkgのコマンドを利用する方法
    一度だけ.\vcpkg integrate installコマンドを実行します。
    すべてのVisual C++のプロジェクトで、特別な設定をすることなくVcpkgでインストールされたライブラリを利用することができるようになります。
    新規に作成したプロジェクトはもちろん、既存のプロジェクトに設定するときにも便利です。

    .\vcpkg integrate install
    

    2017-12-01_00h14_44.png

  • CMakeでプロジェクトを生成する方法
    OpenCV Advent Calendar 2017 1日目の記事を読んだ方はすでにCMakeを使っていますね?使っていますね?
    CMakeはCMakeListsをもとに設定済みのプロジェクトを生成します。
    これまで利用していたCMakeListsにCMAKE_TOOLCHAIN_FILEの設定を加えるだけでfind_package()はVcpkgでインストールされたライブラリを探索します。

    set( CMAKE_TOOLCHAIN_FILE "C:/vcpkg/scripts/buildsystems/vcpkg.cmake" )
    

    コマンドラインでCMakeを使用している場合は、同じオプションを渡しても大丈夫です。

    cmake -DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake"
    

プログラムを実行する

プログラムをビルドすると、VcpkgがPost-Build Eventに設定したコマンドにより、プログラムの実行に必要な依存ファイル(opencv_core<version>.dllなど)が実行ファイルのディレクトリにコピーされます。
そのため、「環境変数Pathにパスを通して…」なんて特別な設定をする必要はありません。そのまま実行することができます。

2017-12-03_00h55_51.png

まとめ

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)