浮点异常 C
Floating Point Exception C
我在测试以下功能时不断收到此错误。它应该标准化包含颜色 0 到 255 像素的图像的值。我找到了最小值和最大值,将它们更改为 0 和 255,然后相应地更改所有中间值以适应之前相同的差异比率:
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);
}
}
}
`max.计算错误
尽管代码应该如下所示,但这还不是全部。
// if(array[i] < maxValue) maxValue = array[i];
if(array[i] > maxValue) maxValue = array[i];
如果所有像素的颜色相同 (difference1 == 0
),代码应该仍然有效。在这种情况下,一个简单的解决方案是不理会 array[]
。
int difference1 = maxValue - minValue;
if (difference1 > 0) {
uint8_t ratios[cols*rows];
...
array[i] = round(ratios[i] * 255);
}
}
}
这样的说法正确吗?
void normalize( uint8_t 数组[],
无符号整数列,
无符号整数行)
{
//each pixel is rounded by 255 * (index-lowest_pixel_val_in_array) divided by ( highest value pixel minus lowest value pixel)
// your code here
uint8_t minValue = 255; //255 means WHITE
uint8_t maxValue = 0; // 0 MEANS BLACK
for (int i = 0; i < cols*rows ; ++i) //PREINCREMENT means if i= 1 and j=++i=2/
{
if(array[i] < minValue)
minValue = array[i]; //make minimum value the array
if(array[i] > maxValue)
maxValue = array[i]; //make maximum value for array
}
int difference = maxValue - minValue; //the difference is maximum - minimum
// uint8_t 比率[列*行]; //改变把这个放在里面
if(difference > 0) //ENSURE MAX != MIN
{
uint8_t ratios[cols*rows]; //CHANGED PUT THIS INSIDE
for (int i = 0; i < cols*rows ; ++i) //PREINCREMENT means if i= 1 and j=++i. j becomes 2 but for i++ j wuld be 1
{
ratios[i] = 0; //SET IT 0 INTIALLY.
ratios[i] = (array[i] / difference) - 1; //subtract 1st pixel and CALCULATE RATIOS
if(array[i] == minValue)
{
array[i] = 0; //lightest becomes darkest
}
else if(array[i] == maxValue)
{
array[i] = 255; //darkest becomes lightest
}
else
{
array[i] = round(ratios[i] * 255); //ROUND THE PIXEL
}
}
}
}
我在测试以下功能时不断收到此错误。它应该标准化包含颜色 0 到 255 像素的图像的值。我找到了最小值和最大值,将它们更改为 0 和 255,然后相应地更改所有中间值以适应之前相同的差异比率:
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);
}
}
}
`max.计算错误
尽管代码应该如下所示,但这还不是全部。
// if(array[i] < maxValue) maxValue = array[i];
if(array[i] > maxValue) maxValue = array[i];
如果所有像素的颜色相同 (difference1 == 0
),代码应该仍然有效。在这种情况下,一个简单的解决方案是不理会 array[]
。
int difference1 = maxValue - minValue;
if (difference1 > 0) {
uint8_t ratios[cols*rows];
...
array[i] = round(ratios[i] * 255);
}
}
}
这样的说法正确吗?
void normalize( uint8_t 数组[], 无符号整数列, 无符号整数行) {
//each pixel is rounded by 255 * (index-lowest_pixel_val_in_array) divided by ( highest value pixel minus lowest value pixel)
// your code here
uint8_t minValue = 255; //255 means WHITE
uint8_t maxValue = 0; // 0 MEANS BLACK
for (int i = 0; i < cols*rows ; ++i) //PREINCREMENT means if i= 1 and j=++i=2/
{
if(array[i] < minValue)
minValue = array[i]; //make minimum value the array
if(array[i] > maxValue)
maxValue = array[i]; //make maximum value for array
}
int difference = maxValue - minValue; //the difference is maximum - minimum
// uint8_t 比率[列*行]; //改变把这个放在里面
if(difference > 0) //ENSURE MAX != MIN
{
uint8_t ratios[cols*rows]; //CHANGED PUT THIS INSIDE
for (int i = 0; i < cols*rows ; ++i) //PREINCREMENT means if i= 1 and j=++i. j becomes 2 but for i++ j wuld be 1
{
ratios[i] = 0; //SET IT 0 INTIALLY.
ratios[i] = (array[i] / difference) - 1; //subtract 1st pixel and CALCULATE RATIOS
if(array[i] == minValue)
{
array[i] = 0; //lightest becomes darkest
}
else if(array[i] == maxValue)
{
array[i] = 255; //darkest becomes lightest
}
else
{
array[i] = round(ratios[i] * 255); //ROUND THE PIXEL
}
}
}
}