爲了獲得視差圖的平均值,我不得不寫自己的方法忽略負差異值:GDB算術異常 - 不除以零 - 運行時錯誤
float Utility::calcMeanDisparity(cv::Mat const& matrix)
{
int total = 0;
int numElements = 0;
for(int r = 0; r < matrix.rows; ++r)
{
for(int c = 0; c < matrix.cols; ++c)
{
if(static_cast<float>(matrix.at<short>(r,c)) > 0)
{
total += static_cast<float>(matrix.at<short>(r,c));
++numElements;
}
}
}
float mean = total/abs(numElements);
std::cout << total << "/" << numElements << " = " << mean << std::endl;
return mean;
}
,但我的代碼只是崩潰經過一段時間後,與gdb的錯誤:
Program received signal SIGFPE, Arithmetic exception.
0x000000000044a992 in Utility::calcMeanDisparity (matrix=...) at src/utility.cpp:250
250 float mean = total/abs(numElements);
但是我沒有辦法做一個零除法。這三個最後幾行我的代碼試圖計算:
950149/4275 = 222
804412/4429 = 181
873770/4253 = 205
我還添加了abs(foo)
東西零是完全安全的部門。
其實我現在還不知道該怎麼做。
也許你們中的一個人有一個想法。
你能給我們一個[最小完整的例子](http://stackoverflow.com/help/mcve)嗎? – Beta
我應該如何讓它更小?問題是程序在非課稅時間後崩潰。我給這個函數提供一個沒有標準化的視差圖。我無法提供更多信息,因爲我真的不知道那裏發生了什麼 – hGen
gdb認爲'total'和'numElements'的值是什麼? –