Reference
https://github.com/shimat/opencvsharp
Install OpenCVSharp
1年ぶりくらいにOpenCVSharp を使おうと思ったら、OpenCVのバージョンアップに伴い、若干 I/F に変更があったようなので、一部動かなくなっていた。そこで、環境構築と修正のメモです。
環境
Microsoft Visual Studio Community 2019 Version 16.7.3
OpenCVSharp 4.4.0
インストール手順
Reference にある手順書に従い、Visual Studio の Nuget パッケージの管理から、OpenCvSharp4, OpenCvSharp4.nuntime.win をインストールする。
古いバージョンからの変更点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
以前の実装 image1.Source = OpenCvSharp.Extensions.BitmapSourceConverter.ToBitmapSource(img); ところが、OpenCVSharp V4.4.0 では、BitmapSourceConverter が BitmapConverter に変更になったようで、ToBitmapSource が使えなくなってました。 そこで、次のように修正。 [System.Runtime.InteropServices.DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject); ・・・ Bitmap bmp = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(img); IntPtr bmpPtr = bmp.GetHbitmap(); image1.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bmpPtr, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); DeleteObject(bmpPtr); // DeleteObject しないと、メモリーリークする。 |
注意
Bitmap.GetHbitmap メソッド のメモリーリークに関して
その他注意事項
インストールパッケージを作成すると、プログラムが動作しない。原因を調査したところ、インストールパッケージに OpenCvSharpExtern.dll が含まれていない。依存関係が正しくセットされいないのかもしれない。
対応として、インストールパッケージに対応する OpenCvSharpExtern.dll を追加する。このときの注意点として、OpenCvSharpExtern.dll には、Release/Debug, 64/x86 の4種類のファイルが存在している。正しいバージョンを追加しないと動作しないので注意。ここでは、
自分の環境では、32bit 版でビルドしているので、
*****\bin\Release\dll\x86\OpenCvSharpExtern.dll
を追加する。
Dependency Walker について
shimat さんのメモによると、この問題はあちこちで起こっているようで、Dependency Walker を使うとdllの依存関係を調査するのに便利とありました。
しかしながら、自分の環境(Win 10)では、 Dependency Walker V2.2に exe を追加すると、フリーズしてだめでした。Dependency Walker のあとにリリースされている Dependencies も試してみましたが、こちらも自分の環境では起動すらできませんでした。