[英]Strange behavior with OpenCV
當我在包含OpenCV 1.1(一種計算機視覺庫)的Visual C ++ 2005中編譯我的Windows應用程序(稱為CrosslinesDetection)時,我沒有得到任何編譯或鏈接錯誤,但是當我運行它時,它會停滯並凍結,並且Windows說以下內容:
"Unhandled exception at 0x7c915223 in CrosslinesDetection.exe:
0xC0000005: Access violation writing location 0x00030ffc."
該程序是常見的C ++ Windows應用程序,帶有兩行OpenCV代碼:
IplImage *img = cvCreateImage( cvSize( 1024, 768 ), IPL_DEPTH_8U, 1 );
cvReleaseImage( &img );
現在,奇怪的行為是,如果我-包含OpenCV行,程序將引發異常-排除OpenCV行,則程序將正常運行。
我在另一個項目中使用了OpenCV庫,沒有任何問題。 特別是,我為GUI創建了一個C#項目,並在后台為DLL編譯了一個C ++項目。 如果我為上述代碼行創建了這樣的解決方案,那么在執行過程中就不會有問題。
有誰知道,什么可能導致此錯誤?
感謝您的幫助,斯特凡
感謝您的評論。
同時,我使用一個最小的項目進行測試。
我仍然不完全理解這個問題,但與此同時,我發現,當我包含第三方庫(來自uEye)時,就會發生這種情況。
如果我使用來自OpenCV和項目中的uEye庫的單個函數,則會發生異常。 如果我使用來自OpenCV或uEye的單個函數,則不會引發任何異常。 因此,這些似乎與庫不兼容,或者還有另一個問題。 但是,我不知道如何檢測到它。
不,現在不行。 在最小的示例中,功能無關。 一個功能初始化相機,另一個功能初始化圖像結構。
但是也許錯誤在其他地方...
我在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庫是否確實存在問題。
我建議在沒有托管代碼的情況下在本機項目中測試相同的代碼。 MFC或Win32控制台應用程序。
是不是
cvReleaseImage( img );
? (和號已刪除)另外,您還應該檢查正確的調用約定。
我只是使用OpenCV 1.0和Visual Studio 2008運行並編譯了這些確切的行,沒有錯誤。 也許嘗試創建一個空項目,該空項目除了包含cxcore.h標頭外什么都不做,然后運行這兩行。
只是對其他海報者來說:沒有&符是規范的一部分,他是正確的。 抱歉,我將其發布為評論,但還不能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.