Top > ComputerGraphics > OpenCV > SettingOpenCVSharp_2
Last-modified: Mon, 01 Oct 2012 08:58:52 JST
Counter:12499 Today:2 Yesterday:2 Online:3
このエントリーをはてなブックマークに追加

OpenCVSharpを導入する-2 "サンプルプロジェクトの作成"

About

 「OpenCVSharpを導入する-1 "環境構築"」の続きです。OpenCV、OpenCVSharp、TBBが用意できたらVisualStudioのサンプルプロジェクトを作成してみます。ここではVisualStudio2010(および2012)を想定しています。

  • fileOpenCVTest.zip
    • VisualStudio2010プロジェクト
    • WPF(.NetFramework4.0)
    • OpenCV_240
    • OpenCVSharp_240
    • Windows-64bit構成

配布されるサンプルについて

  • 動画や画像を読み込んでWPFのGUIコンポーネント(Image)上に表示するアプリケーションです。動画の場合には最初の1フレームを展開して表示しますが、読み込みに失敗することが良くあります。原因は分かりませんが、ここでは本質的では無いので割愛します。

プロジェクトの作成と設定

新規プロジェクトの作成

 C#でアプリケーションの開発を行うわけですし、折角なのでここではWPFアプリケーションを作成することにします。設定自体はWinFormsアプリケーションやその他コンソールアプリケーションでも同様のために、ここではあまりプロジェクトの種類を気にする必要はありません。いつもの通りプロジェクトの新規作成からWPFアプリケーションを選択します。作成したプロジェクトをとりあえず保存しておきます。

プロジェクトのプラットフォーム設定

0.png

 VisualStudioからプロジェクトをビルドして出力する際に、ターゲットとするプラットフォームを設定します。「構成マネージャー」から設定をすることができます。デフォルトでは「x86(32bit)」向けの設定となっています。以降の設定は主に64bit環境を利用する人向けの設定になります。

1.png

 構成マネージャを開くと次の様なウィンドウが表示されます。「プラットフォーム」のボタンを押すなどして「新規作成」を実行してください。「新しいプラットフォーム」の項目はデフォルトで「Any CPU」になっているかと思います。恐らくこのままでも開発を進められるのですが、保険のために設定を変えます。プルダウンメニューを開いて「x64」を選択します。さらに「設定のコピー元」を「x86」から「空」に変更します。その後「OK」を実行し新規作成を完了します。この作業は「構成」が「Debug」の場合と「Release」の場合とどちらにもする必要があるので、Debugの設定を終えたら「構成」の項目を「Release」に変更して、再度同様の手順を踏みます。

2.png

 構成マネージャーが表示されていない場合は「ツール>オプション>プロジェクトおよびソリューション」の項目「ビルド構成の詳細を表示(I)」にチェックが入っているか確認してください。チェックが入っている必要があります。

OpenCVSharpの参照の追加

 保存したプロジェクトのディレクトリ内へOpenCVSharpのDLLをコピーします。展開したOpenCVSharpのディレクトリの内、64bit環境の場合はx64の付くディレクトリから、32bit環境の場合はx86の付くディレクトリから、「OpenCVSharp.dll」をコピーしてきます。ここでx64ないしx86の選択は、利用するOpenCVのバージョンに合わせます。他のDLLが必要な場合には任意でコピーしてください。

 コピーを終えたらプロジェクトにOpenCVSharpへの参照を追加します。特に変わったことをする必要はなく「ソリューションエクスプローラ」から「参照設定 > 参照の追加」で良いでしょう。

 OpenCVのDLLはC++向けに作られているもので参照へ追加できないので注意して下さい。OpenCVのDLLの扱いについては次の項目で解説しています。

OpenCVの配置

 OpenCVSharpを用いてビルドされた実行ファイルは、その実行ファイルが含まれる同一のディレクトリに、OpenCV(のDLL)が配置されている必要があります。よってVisualStudioがプロジェクトをビルドする、デバッグする際に作成する実行ファイルが含まれるディレクトリ内に、OpenCVのDLLを複製して配置する必要があるわけです。

配置するOpenCVのDLL

 実行ファイルと同一のディレクトリに配置する必要のあるDLLは、ダウンロード/インストールして展開されたOpenCVのディレクトリ内にあります。次のパスにDLLが含まれているハズです(Win版)。x64ないしx86は、開発する環境に応じて選択してください。

  • OpenCVのDLLが含まれるディレクトリのパス
    • 「opencv\build\x64(ないしx86)\vc10\bin」

 中に含まれる「opencv_coreXXX」がOpenCVの核となるDLLです。ここでは「opencv_core240」を扱っています。見た通り、後に続く番号はOpenCVのバージョンを表しています。ここで必ずOpenCVSharpとバージョンの対応がとれているか確認します。

 プロジェクトを一度「デバッグ」「Release」してそれぞれ実行ファイルの出力先ディレクトリに、先のディレクトリに含まれるDLLを複製します。利用する機能によって不要になるDLLもあるでしょうが、基本的には全て複製しておくのが無難です。OpenCVSharpはこれらのDLLを利用如何に関わらず参照している節があります(確かかどうかは定かじゃないです)。ただし、良く似た名前のDLLで「d」が付くものとそうでないものがありますが、基本的には「d」の付かない方のみを全て複製すれば十分です。「d」付きのDLLはデバッグ用だったはず。

TBBの配置

 OpenCVと同様にTBBのDLLも実行ファイルと同じ階層のディレクトリに配置されている必要があります。OpenCVと同様に、DLLを実行ファイルの出力ディレクトリに複製してしまいましょう。ダウンロードして展開したTBBのディレクトリの次のパスに配置する必要のあるDLLがあります。

  • TBBのDLLが含まれるディレクトリのパス
    • 「tbb41_20120718oss\bin\ia32(ないしintel64)\vc10」

 32bit(x86)を利用する場合は「ia32」から、64bitの場合は「intel64」からDLLを複製すれば良いハズです。基本的には「tbb.dll」のみ複製すれば動作する様です。実装機能、利用する関数の必要に応じてその他のDLLを任意に追加してください。

OpenCV/TBBの自動配置

 OpenCVやTBBのDLLは出力(ビルド先)フォルダへ一度複製してしまえば、基本的にはそれ以降の操作が不要になります。しかしそれらがプロジェクトに含まれているかどうか分からなくなりますし、何かの要因で削除してしまうこともあります。この問題を解決するにはOpenCVやTBBのDLLをプロジェクトにリソースとして取り込み、「プロパティ」から「出力ディレクトリにコピー/コピーする」を設定するか、ビルドイベントで特定のディレクトリから複製するなどするのが良いハズです。ここでは詳細については割愛します。

最終的な状態

 最終的に次の様な状態になっていれば良いことになります。

  • プロジェクトのソリューションプラットフォームがx86ないしx64に設定されている
  • x86ないしx64の、OpenCVSharpのDLLが参照設定に加えられている
  • 実行ファイルと同じディレクトリに次のDLLが配置されている
    • x86ないしx64の、OpenCVのDLL
      • ただしdが付かないもののみで良い
    • x86ないしx64の、TBBのDLL
    • デバッグのディレクトリとReleaseのディレクトリとあるので気を付ける