コンピューター ビジョン ライブラリである OpenCV 1.1 を含む Visual C++ 2005 で Windows アプリケーション (CrosslinesDetection と呼ばれる) をコンパイルすると、コンパイル エラーもリンク エラーも発生しませんが、実行すると、ある時点でフリーズし、Windows次のように述べています。
"Unhandled exception at 0x7c915223 in CrosslinesDetection.exe:
0xC0000005: Access violation writing location 0x00030ffc."
このプログラムは、2 行の OpenCV コードを含む一般的な C++ Windows アプリケーションです。
IplImage *img = cvCreateImage( cvSize( 1024, 768 ), IPL_DEPTH_8U, 1 );
cvReleaseImage( &img );
奇妙な動作は、OpenCV行を含めると、プログラムが例外をスローし、OpenCV行を除外すると、プログラムが正常に動作することです。
OpenCV ライブラリを別のプロジェクトで問題なく使用しました。具体的には、GUI 用の C# プロジェクトと、バックグラウンドで DLL としてコンパイルされた C++ プロジェクトを作成しました。上記の行に対してそのようなソリューションを作成すると、実行中に問題は発生しません。
このエラーの原因は何ですか?
助けてくれてありがとう、ステファン
コメントありがとうございます。
その間、テストには最小限のプロジェクトを使用します。
私はまだ問題を完全には理解していませんが、サードパーティのライブラリ (uEye から) を含めると例外が発生することがわかりました。
プロジェクトで OpenCV と uEye ライブラリの関数を 1 つ使用すると、例外が発生します。OpenCV または uEye から単一の関数を使用すると、例外はスローされません。したがって、これらのライブラリには互換性がないように思われるか、別の問題があります。ただし、それを検出する方法がわかりません。
いいえ、現時点ではありません。最小限の例では、関数は無関係です。1 つの関数はカメラを初期化し、もう 1 つの関数は画像構造を初期化します。
しかし、おそらくエラーは他の場所にあります...
Visual Studio で C++ Windows フォーム アプリケーションを作成しました。フォームにボタンと Form1.h ファイルの対応する関数を追加しました。
private: System::Void Form1_Click(System::Object^ sender, System::EventArgs^ e) {
OpenCamera();
IplImage * img = cvCreateImageHeader( cvSize( 1024, 768 ), IPL_DEPTH_8U, 1);
cvReleaseImage( &img );
CloseCamera();
}
そして、Form1.h の先頭に headeras を追加しました。
#include "CameraControl.h"
#include "cv.h"
次に、プリコンパイル済みヘッダー オプションをオフにし、/clr:pure から /clr オプションに変更して、プロジェクトを正常にコンパイルおよびリンクする必要がありました。
しかし、その後、上記の例外がスローされるプログラムを実行します...
C++ Windows フォーム アプリケーションを誤用していて純粋な C++ コードを含めるべきではないのか、それとも OpenCV または uEye ライブラリに本当に問題があるのか疑問に思っています。