OpenCvSharpでのエラー

OpenCvSharpを使って作ったプログラムを別のPCで実行しようとしたところエラーが発生した。
もちろん、OpenCvSharpもOpenCVも全てのDLLをプログラムと同じディレクトリに入れている。

特に、opencv_imgproc231.dllの64bitと32bitを直接実行ファイルのディレクトリに入れた場合、以下のようにエラーに違いが出た。

64bit DLL

P/Invokeが原因で例外が発生しました。
以下の項目を確認してください。

1. OpenCVのDLLが実行ファイルと同じ場所に置かれていますか?またはパスが正しく通っていますか?
2. Visual C++ Redistributable Packageをインストールしましたか?
3. OpenCVのDLLやOpenCvSharpの対象プラットフォーム(x86またはx64)と、プロジェクトのプラットフォーム設定が合っていますか?

System.BadImageFormatException: 間違ったフォーマットのプログラムを読み込もうとしました。(HRESULTからの例外: 0x8007000B)
 場所 OpenCvSharp.CvInvoke.cvReleaseHist(IntPtr& hist)
 場所 OpenCvSharp.Utilities.PInvokeHelper.TryPInvoke()


32bit DLL

P/Invokeが原因で例外が発生しました。
以下の項目を確認してください。

1. OpenCVのDLLが実行ファイルと同じ場所に置かれていますか?またはパスが正しく通っていますか?
2. Visual C++ Redistributable Packageをインストールしましたか?
3. OpenCVのDLLやOpenCvSharpの対象プラットフォーム(x86またはx64)と、プロジェクトのプラットフォーム設定が合っていますか?

System.DLLNotFoundException: DLL’opencv_imgproc231’を読み込めません: 指定されたモジュールが見つかりません。(HRESULTからの例外: 0x8007007E)
 場所 OpenCvSharp.CvInvoke.cvReleaseHist(IntPtr& hist)
 場所 OpenCvSharp.Utilities.PInvokeHelper.TryPInvoke()


64bitだとフォーマットが違うといわれているので、やはりOpenCVのプラットフォームの対象はあっているようだ。

結論として、何がいけなかったかというと私はTBBを有効にしてOpenCVをコンパイルしていたのだが、TBBのDLLは一緒に別のPCへ持っていかなかったことが原因だった。
TBBのパスを通したところ問題なく動作するようになった。

 

備考: 旧ブログ移植

コメントを残す

メールアドレスが公開されることはありません。