2012-07-06 59 views
4

我正在爲ios平臺開發opencv應用程序。我有我自己編譯的調試和發佈方案的opencv,但是當我嘗試使用Debug方案運行cv::meanStdDev函數時,應用程序失敗,出現異常(使用Release它可以正常工作)。 測試功能很簡單:爲什麼cv :: meanStdDev函數在調試時失敗,出現異常

float list[] = {1.2,1.2,1.3,0.3,6.5,2.2,0.9,0.8,0.9}; 
cv::Mat test(1,9,CV_32F, list); 
cv::Scalar mean1, stddev1; 
cv::meanStdDev(test, mean1, stddev1); 
printf("[%f, %f]", mean1.val[0], stddev1.val[0]); 

此功能工作正常的發行方案,但在調試,它拋出這樣一個異常:

OpenCV Error: Assertion failed (dims == 2 && ((sizes[0] == sz.height && sizes[1] == sz.width) || (allowTransposed && sizes[0] == sz.width && sizes[1] == sz.height))) in create, file /Users/jgoenetxea/libraries/OpenCV-2.4.0/trunk/opencv/modules/core/src/matrix.cpp, line 1375 
terminate called throwing an exception 

此行是一個「創造」功能矩陣類。 在這一點上,kind()函數在同一個矩陣的調試和發佈方案中給出了不同的值。當選擇調試方案時,由於此kind()函數的結果,執行使用CV_Assert函數調用檢查某些數據,然後失敗。

任何想法?有人知道我可以檢查什麼?

+0

這類問題在OpenCV郵件列表中有更多的機會接受正確的答案。這太具體了。 – karlphillip 2012-07-06 13:21:44

回答

4

這是你的整個程序嗎? 如果不是,則存在堆損壞的可能性,這在OpenCV上由於對Mat元素的錯誤訪問而非常常見。

例:

Mat<uchar> mat(2,2); 
mat.at<float>(1,1)=0.1; 

如果你寫的程序段之前,這樣的代碼,有可能是一個機會,你的堆被損壞,那麼你必須修復它。 在釋放模式下,您可能會破壞另一個不會干擾這部分代碼的區域,但在調試時它看起來像是這樣。

但是,如果這是你的整個代碼,我不能太多...它看起來是對的。

+0

是的,我在這個塊之前和之後有更多的代碼,但是矩陣在這裏初始化。其餘的代碼是ios應用程序的初始化,所以矩陣不應該被破壞。感謝你的回答! ;) – goe 2012-07-07 12:31:09

相關問題