簡體   English   中英

OpenCV的奇怪行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM