2012-01-14 65 views
12

我想加載在訓練xml文件CascadeClassifier::load(),它在調試模式下工作得很好,但在發佈模式我得到一個運行時錯誤。簡單的OpenCV命令工作在調試模式,但不是發佈模式

我得到的錯誤是:在Testing.exe在0x000007feefbf4938

未處理的異常:0000005: 訪問衝突寫入位置0x0000000000000027。

我的代碼如下:

CascadeClassifier c; 
if (!c.load("C:/data/haarcascade_frontalface_alt.xml")) 
{ 
    exit(1); 
} 

的代碼崩潰的加載線。爲什麼會發生?

+1

這是你的代碼嗎?如果是的話,這可能是OpenCV中的一個錯誤。如果沒有,請刪除所有代碼,並嘗試本地化錯誤 – Sam 2012-01-16 09:14:58

+0

Windows的C++界面給了我很多麻煩。嘗試使用OpenCV的C接口並準備好慶祝。這個問題值得讚賞。 – karlphillip 2012-01-16 17:11:23

+7

您是否爲您的應用程序的調試版本和Release Opencv for Release版本的應用程序鏈接了調試OpenCv庫?我可能是worng,但你應該檢查它。 – Patryk 2012-01-17 18:53:37

回答

8

確保您在發佈模式下運行時鏈接到openCV的發行版dll。當我嘗試使用混合版本和調試DLL加載文件時,我遇到了類似的問題。

請參閱this後。

+0

在鏈接器中添加** Additional Dependencies **時,我犯了同樣的錯誤。從'opencv_world330d.lib'更改爲'opencv_world330.lib'爲我解決了這個問題。 – Sndn 2017-12-14 11:29:00

0

沒有猜測爲什麼您的load行只會對發佈構建造成訪問衝突。因此,下一步就是使用日誌記錄或printfs或任何適用於您的OpenCV版本二進制文件。這種類型的調試適用於這種情況,因爲您擁有OpenCV的源代碼並且可以使用VS2010重新編譯。

0

我相信你的錯誤是在你的項目設置中的'加載'的XML文件和'工作目錄'設置。

如果您轉到項目的「屬性」窗口,請確保「調試」選項中的「工作目錄」是正確的。更改'配置'(調試和發佈之間),你應該能夠比較。

當您嘗試讀取不存在的文件時,您有時會收到此錯誤。使用位於「錯誤」工作目錄中的本地路徑通常是在一個配置中工作而不是另一個時的罪魁禍首。

編輯:

這是否文件都存在,這是正確的XML?

+0

我會檢查你的建議,當我回家時,但是它存在並且是正確的。就像我說的,這在調試模式下工作得很好,但不是釋放模式。 – zebra 2012-01-17 23:27:42

+0

是的,但是如果你是從VS開始的代碼,即使在發佈模式下,它仍然會看上面提到的「工作目錄」,看看它應該在哪裏生活。如果這與調試模式不一樣,並且您在任何地方使用本地路徑(可能是這種情況),則可能是您的問題。 – g19fanatic 2012-01-18 12:44:30

0

這很奇怪。檢查您的選項以進行調試和發佈版本,確保您使用的是正確版本的庫。

我試圖運行在我的一個項目的代碼,無論是在調試和發佈版本的做工精細,用OpenCV的2.3.1

嘗試添加幾行代碼到另一個項目,與發行版本的工作,並在那裏你已經使用opencv。如果有效,那麼問題出在配置設置中。

相關問題