Matクラスが使えない場合がある?
先日、OpenCVSharpが使えている環境で、Matクラスを利用すると(インスタンスを生成するだけで)プログラムが
Invokeエラー:OpenCvSharpExtern.dll' を読み込めない(見つからない)
といったエラーを起こしてしまうという事象が起きました。
おさらいですが、OpenCVSharpを使うには、母体であるOpenCVに対して
- プラットフォーム(32 or 64 bit)を共通にする
- バージョンを共通にする
- プロパティの「出力ディレクトリにコピーをする」
という設定が必要です。
これらを注意し、IplImageを利用したサンプルプログラムの動作を確認しても、Matを使う時にはダメ、、、という意味不明な事象。エラーはInvoke関係のエラーで、エラーメッセージの注意書きにあるように
- OpenCVのパス確認
- Visual C++ Redistributable Package(再頒布可能パッケージ)のインストール
- プラットフォームの一致(32bit or 64bit)
Visual C++ 再頒布可能パッケージに罠があった!
で、今回のエラーでは上記条件は全てクリアしており、原因究明に試行錯誤していたのですが、原因はVisual C++ Redistributable Package(再頒布可能パッケージ)にありました。
今回の開発環境はVisual Studio 2010ですので、Visual studio 2010の再頒布可能パッケージをインストールすればいいと思っておりました。。。が、Dependency Walkerで依存ファイルを見てみると
msvcr110.dllがないということが発覚。これは、Visual Studio 2012の再頒布可能パッケージに付随するものです。つまり、Visual studio 2010を使っているから2010用の再頒布可能パッケージがあればいいのではないということ。これは盲点でした。早速、、Visual Studio 2012の再頒布可能パッケージをインストールして解決したわけです。
なお、OpenCVSharp系のエラーはDependency Walkerで原因究明しろと作者も述べているのでインストールしておくとよいでしょう。
0 件のコメント:
コメントを投稿