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のパスを通したところ問題なく動作するようになった。
備考: 旧ブログ移植
コメント