我在测试以下函数时不断收到此错误。它应该对包含0到255像素颜色的图像的值进行归一化处理。我发现最小值和最大值将它们更改为0和255,然后相应地更改所有中间值以适应以前相同的差异比例:浮点异常C
void normalize(uint8_t array[],
unsigned int cols,
unsigned int rows)
{
uint8_t minValue = 255;
uint8_t maxValue = 0;
for (int i = 0; i < cols*rows ; ++i)
{
if(array[i] < minValue) minValue = array[i];
}
for (int i = 0; i < cols*rows; ++i)
{
if(array[i] < maxValue) maxValue = array[i];
}
int difference1 = maxValue - minValue;
uint8_t ratios[cols*rows];
for (int i = 0; i < cols*rows ; ++i){
ratios[i] = 0;
}
//find the ratios
for (int i = 0; i < cols*rows ; ++i){
ratios[i] = (array[i]/difference1) - 1;
}
for (int i = 0; i < cols*rows ; ++i){
if(array[i] == minValue){
array[i] = 0;
}else if(array[i] == maxValue){
array[i] = 255;
}else{
array[i] = round(ratios[i] * 255);
}
}
}
你得到一个除以零错误时'difference1'为零 –
而'difference1'是0,因为'minValue'等于' maxValue',只要图像上有黑色像素。 – francis
谢谢!我完全没有看到if语句中的错误。 – user5056973