fix a critical precision issue
This commit is contained in:
parent
98043bbe0c
commit
252d5c62e0
@ -47,21 +47,24 @@ return maxval;
|
|||||||
int fimg_meanvalues(FloatImg *head, float means[4])
|
int fimg_meanvalues(FloatImg *head, float means[4])
|
||||||
{
|
{
|
||||||
int idx, surface;
|
int idx, surface;
|
||||||
|
double accus[4];
|
||||||
|
|
||||||
surface = head->width * head->height;
|
surface = head->width * head->height;
|
||||||
if (surface < 1) return -1;
|
if (surface < 1) return -1;
|
||||||
|
|
||||||
memset(means, 0, 4*sizeof(float));
|
memset(accus, 0, 4*sizeof(double));
|
||||||
|
|
||||||
for (idx=0; idx<surface; idx++) {
|
for (idx=0; idx<surface; idx++) {
|
||||||
means[0] += head->R[idx];
|
accus[0] += head->R[idx];
|
||||||
if (head->type > 2) {
|
if (head->type > 2) {
|
||||||
means[1] += head->G[idx];
|
accus[1] += head->G[idx];
|
||||||
means[2] += head->B[idx];
|
accus[2] += head->B[idx];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (idx=0; idx<4; idx++) means[idx] /= (float)surface;
|
for (idx=0; idx<4; idx++) {
|
||||||
|
means[idx] = (float)(accus[idx]/(double)surface);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user