Для того, чтобы получить среднее значение карты неравенства я должен был написать собственный метод игнорировать отрицательные значения диспропорция: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'? –