fix a critical precision issue

This commit is contained in:
tth 2019-09-28 23:45:51 +02:00
parent 98043bbe0c
commit 252d5c62e0

View File

@ -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;
} }