OpenCvSharp の利用手順

はじめに

ShaperCV プログラミングでのトラブル - BiBoLoGの解決を諦めることにした.それで,利用しやすそうだと思ったから,OpenCvSharp を選んだ.

手順

GitHub - shimat/opencvsharp: .NET Framework wrapper for OpenCVを見ただけではダメだった.

成功する一例

  1. OpenCvSharp-Beta-20081114.zip を入手し,適当なフォルダに展開する
    • D:\Develop\OpenCvSharp とした
  2. chopencv-2.5.0-win-binary.zip を入手し,適当なフォルダに展開する
    • D:\Develop\chopencv-2.5.0-win-binary とした
    • ch と 2.5.0 の意味する内容については後で書く
  3. VC# 2008 EE を起動し,新規プロジェクトを作成する
    • Windows フォーム アプリケーションで,OpenCvSharpTest と名付けた
  4. 参照の追加から OpenCvSharp.dll を登録する
  5. 既存項目の追加から chopencv-2.5.0-win-binary/chopencv/bin/ 以下の DLL を追加する(http://svn.coderepos.org/share/lang/cpluspluscli/OpenCvSharp/sample/OpenCvSharpSample/ にあるファイルから察した)
    • cv100.dll
    • cxcore100.dll
    • highgui100.dll
    • libguide40.dll
  6. 追加した DLL のプロパティ「出力ディレクトリにコピー」属性を「新しい場合はコピーする」に変更する*1
  7. Program.cs に次のコードを記述し,実行する
using System;
using System.Runtime.InteropServices;
using KwsmLab.OpenCvSharp;

namespace OpenCvSharpTest
{
    static class Program
    {
        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main()
        {
            using (IplImage image = new IplImage(128, 128, BitDepth.U8, 1)) {
                image.Zero();
                for (int x = 0; x < image.Width; x++) {
                    for (int y = 0; y < image.Height; y++) {
                        int offset = y * image.WidthStep + x;
                        byte value = (byte)(x + y);
                        Marshal.WriteByte(image.ImageData, offset, value);
                    }
                }
                using (CvWindow window = new CvWindow(image)) {
                    CvWindow.WaitKey();
                }
            }
        }
    }
}


OpenCV 1.0 のDLLを追加していないとき

次のメッセージを見る.このエントリを書くとき,30分くらい詰まった.

System.IO.FileNotFoundException はハンドルされませんでした。
  Message="指定されたモジュールが見つかりません。 (HRESULT からの例外: 0x8007007E)"
  Source="OpenCvSharpTest"
  StackTrace:
       場所 WindowsFormsApplication1.Program.Main()
       場所 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       場所 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       場所 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       場所 System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

ch と 2.5.0 の意味する内容

chopencv-2.5.0-win-binary.zipというファイルは今回使用しません。こちらはChと呼ばれるインタープリタC/C++言語プラットフォーム用のものです。

第2回 OpenCVを使ってみよう:OpenCVで学ぶ画像認識|gihyo.jp … 技術評論社

よくわからん.

*1:複数選択で一括に変更できる