Windows Azure は 64bit 環境なので、多分 x86 な C++ DLL は動かないであろう、と x64 な OpenCV + OpenCvSharp 環境を作成した。
(4/26 現在Windows Azure にもっていっての動作確認はしていません)
OpenCV x64 用バイナリをビルド
http://d.hatena.ne.jp/kokemono/20110419/1303227717 を参考にした。
- cmake をインストール
- cmake-gui を利用し Visual Studio 2010 向けに Configure 。ビルドフォルダとしては C:/OpenCV2.3 を指定。
- cmake-gui 上でインストールオプションのうち、CMAKE_CXX_FLAGS_RELEASE , CMAKE_C_FLAGS_RELEASE に含まれる /MD を /MT に変更する。(下にある画像を参照)
を確認するが、今回は変更しない。(WITH_TBB を使うと速くなるらしいが、まずは最適化より動くこと優先)
- cmake-gui を利用し Generate
- ビルドフォルダ C:/OpenCV2.3 に、以下のバッチファイル buildx64.cmd を作成し、このバッチファイルを実行
ここで、標準のまま上記を実施した場合インストール先は、 C:/OpenCV2.3/install である。
C#プロジェクトに組み込む
今回は、参照するDLLを最小にしたいという目標の下、以下のようにした。
- http://code.google.com/p/opencvsharp/ より OpenCvSharp-2.3.1-x64-20120218.zip をダウンロード。適当な場所に展開する。
- プロジェクトへの参照として OpenCvSharp.dll を追加する。
- C:/OpenCV2.3/install/bin にある opencv_core231.dll, opencv_highgui231.dll, opencv_imgproc231.dll をプロジェクトフォルダにコピーし、既存の項目として追加する。
- opencv_core231.dll, opencv_highgui231.dll, opencv_imgproc231.dll のプロパティで、「出力ディレクトリにコピー」を「新しい場合はコピー」にする。
- Cランタイムライブラリ、MFCライブラリ msvcr100.dll, msvcp100.dll, mfc100.dll, mfc100u.dll, mfcm100.dll, mfcm100u.dll を C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\redist\x64\Microsoft.VC100.* の下にあるファイルを利用して既存の項目として追加する。
- msvcr100.dll, msvcp100.dll, mfc100.dll, mfc100u.dll, mfcm100.dll, mfcm100u.dll のプロパティで、「出力ディレクトリにコピー」を「新しい場合はコピー」にする。

その先のチュートリアルは http://d.hatena.ne.jp/Schima/20100528 を参照。
Azure 環境に VC++ 2010 Redistributable Package をインストール
パッケージのダウンロードは次のURLより行った。 http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84
(2012/5/1 追記) Azure 環境におけるインストール方法については http://msdn.microsoft.com/ja-jp/library/windowsazure/hh694038.aspx “Add an Elevated Startup Task to your Worker or Web Role Project to Install the Native Visual C++ Libraries for Visual C++ 2010 on Worker/Web Role Instances” の章を参照して、起動時にインストールされるようにする。
この時、 Startup.cmd はBOMなしのテキスト、すなわち ShiftJIS ファイルとして作成する方がよい。BOM付きUTF-8 テキストファイルとして作成した場合には、バッチファイルの実行に失敗した。
補足
あまり考えずになるべく標準状態で、cmake の出力先を C:\OpenCV2.3 としたところ、最終的に利用するバイナリの出力先が C:\OpenCV2.3\install になった。
これは cmake のインストールオプションのうち CMAKE_INSTALL_PREFIX で指定したフォルダが相当する。最初 この仕組みを理解するのに結構戸惑った。cmake は「ビルド環境を出力するもの」なので、cmake の出力先フォルダはビルドのためのフォルダにする方がよかった。例えば C:/work/OpenCV2.3 など。その上で CMAKE_INSTALL_PREFIX を C:/OpenCV2.3 にする方が通常利用する状況での階層としては美しくなる。
このブログ記事の一番のお役立ちは、多分バッチファイルでの msbuild オプション指定でしょう。CruiseControl.NET でのOpenCV 自動ビルドへの布石です。
注意点
Web プロジェクトで直接実行して確認する場合、Visual Studio 開発サーバー だと x86 になってしまうので動作しない。Azure プロジェクト または Web プロジェクトでデバッグしたいのであれば IIS Web サーバーの使用を指定する。(VS11 の 開発サーバーは x64 化しているのかしら?)