OpenCVSharp Installation Memo

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 をインストールする。

古いバージョンからの変更点

注意

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 も試してみましたが、こちらも自分の環境では起動すらできませんでした。

System.Windows.Markup.XamlParseException

現象

プロジェクトをコピーして、アイコンを変更しているときに、次のエラーが発生するようになった。

System.Windows.Markup.XamlParseException
HResult=0x80131501
Message=’System.Windows.Baml2006.TypeConverterMarkupExtension’ の値の指定時に例外がスローされました。
Source=PresentationFramework
スタック トレース:
場所 System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)

内部例外 1:
IOException: リソース ‘iconname.ico’ を検索できません。

なお、プロジェクトには、IconName.ico ファイルは存在している。

対応

Xaml の中で、

<Window
xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
…中略…
Closing=”Window_Closing” VerticalAlignment=”Top” Height=”302.5″ Width=”727″ SizeToContent=”WidthAndHeight” Icon=”IconName.ico”>

Icon=”IconName.ico” となっていた。
これを
Icon=”iconname.ico” と修正する。

原因

ファイル名をOriginalIconName.ico から、IconName.ico に変更した。これにあわせて、リファクタリングで、OriginalIconName.ico を IconName.ico に変換した。xaml も当然、IconName.ico に書き換えられた。ファイル名もIconName.icoなので、このままで良いはずだが、この書式は、大文字小文字を識別していて、なおかつ小文字に出ないとダメなようです。