«前の日記(2017年10月01日) 最新 次の日記(2017年10月10日)» 編集

日々をアレコレ


2017年10月09日

UWPでOpenCVを使う準備

画像処理を使ってロボットの操作とかをしてみようということで、その準備としてUWPからOpenCVを使うための準備を忘れないようにメモ。

まず、OpenCVの準備から。基本的には、 Visual Studio 2017にOpenCV3.2.0とopencv_contribを導入する方法 - Qiita にある通りに、次の手順で進める。

  1. CMakeのインストール。

    Download | CMake から最新のものをダウンロードする。僕の場合、Windows 64bit版のインストーラを使ってインストール。

  2. OpenCVのソースを準備

    Releases · opencv/opencv · GitHub からVisual C++向け(opencv-x.x.x-vc14.exe)をダウンロードする。今回は、opencv-3.3.0-vc14.exe をダウンロードして、適当なフォルダ(例えば、C:\opencv)に展開。

  3. OpenCV contribのソースを準備

    Releases · opencv/opencv_contrib · GitHub からダウンロード。 今回は本体と合わせて3.3.0のソースをダウンロードして、本体の展開先から参照しやすい場所(例えば、C:\opencv\contrib)に展開。

  4. CMakeの実行

    参照ページのCMakeの実行 の項目の通り、CMakeを実行して、以下の順に進める。

    1. ソースパスは、本体の展開先のパスを指定。
    2. 出力先は適当に指定(例えば、C:\opecv\build)
    3. ビルド用のプロジェクトは Visual Studio 2017の対象アーキテクチャを指定。32bitなら「Visual Studio 15 2017」、64bitなら「Visual Studio 15 2017 Win64」、ARMなら「Visual Studio 15 2017 ARM」を選択。
    4. 「OPENCV_EXTRA_MODULE_PATH」にOpenCV contribの展開先にある modules フォルダ(例えば、C:\opencv\contrib\modules`` を押して、「Configure」をクリック。すると、先頭にOpenCV contribに含まれるパッケージが選択できるようになる。
    5. 利用するモジュールを選択して、「Configure」をクリックして、「Configure done」と表示されるまで待つ。
    6. 「Generate」をクリックして、ソースファイルを生成する。
    7. 「Open Project」をクリックして、Visual Studio 2017でソリューション(出力先としてした中に OpenCV.sln がある)を開く。
  5. ビルドする。

    Visual Studio 2017で生成されたソースをビルドする。生成は、ソリューション内の CMakeTargets/Install プロジェクトをビルドする。

    これで、VC++から参照するインクルードファイル、libファイル、および、dllファイルが生成される。

    • インクルードファイルは、 (出力先)/install/include フォルダにある。
    • libファイルは、 (出力先)/install/(アーキテクチャ)/vc15/lib フォルダにある。
    • dllファイルは、 (出力先)/install/(アーキテクチャ)/vc15/bin フォルダにある。

以上で、OpenCVを利用するための準備は完了。次に実際に利用するための手順。とりあえず、OpenCVについては、C++/CLIを使って記述して、アプリケーションはC#で記述するという方針でするための手順。

  1. OpenCVを利用するためのプロジェクトは、「Visual C++ > Windows ユニバーサル > Windows ランタイムコンポーネント(ユニバーサルWindows)」のテンプレートを利用する。

    1. C++プロジェクトの設定で、「C/C++ > 全般 > 追加のインクルードディレクトリ」として、ビルドしてできたインクルードファイルのあるフォルダを追加する。
    2. C++プロジェクトの設定で、「リンカー > 全般 > 追加のライブラリディレクトリ」として、ビルドしてできたlibファイルのあるフォルダを追加する。
    3. 参照したいlibファイルの設定は、C++プロジェクトの設定で、「リンカー > 入力 > 追加の依存ファイル」に設定するか、あるいは、OpenCVのAPIを呼び出すソースに以下のような記述をする。

      #if _DEBUG
      #define CV_EXT "d.lib"
      #else
      #define CV_EXT ".lib"
      #endif
      #pragma comment(lib, "(参照するlibファイル名)" CV_EXT)
      

      こうすることで、デバッグとリリースのそれぞれで必要なlibファイルの読み込みは可能。

1.アプリケーションのプロジェクトは、とりあえず、C++と同一のソリューション内に作成する。

1. 参照設定で、C++のプロジェクトを参照する。
1. プロジェクト直下に、DLLフォルダを作成し、その中にさらに「x64」や「x86」、「ARM」といったアーキテクチャ名のフォルダを作成し、それぞれに「Debug」と「Release」フォルダを作成。それぞれのアーキテクチャ、ビルド設定に応じて、利用するdllファイルをコピーする。Debug向けのdllファイルは末尾が「d.dll」となっているもの。
1. プロジェクトのビルドイベントの設定で、ビルド後のイベントコマンドラインとして ``copy $(ProjectDir)DLL\$(PlatformName)\$(ConfigurationName)\*.dll $(ProjectDir)$(OutDir)`` を設定する。これで、アーキテクチャやビルド設定が変わっても、必要なDLLファイルだけをコピーして実行可能に。(未確認だけど、リモートコンピュータなどでも多分問題ないはず)

«前の日記(2017年10月01日) 最新 次の日記(2017年10月10日)» 編集