这样的代码怎么能回复这么乱?

时间:2011-02-08 17:42:01

标签: c++ c opencv normalization

因此,对于超过10000个openCV图像,我想执行类似

的操作
            int maxVal;
            int minVal;
            int wh = w*h;
            int values[1000];
            for(x=0;x<w;x++){
                for(y=0;y<h;y++){
                    double RealColor = cvGetReal2D(source, y, x);
                    values[x*h + y] = RealColor; 
                }
            }
            minVal = *min_element(values,(values+wh));
            maxVal = *max_element(values,(values+wh));
            float dif = maxVal - minVal;
            float fminVal;
            fminVal = minVal;
            for(x=0;x<w;x++){
                for(y=0;y<h;y++){
                    float rc = cvGetReal2D(source, y, x);
                    float normRealColor =(rc - fminVal) / dif;
                    file << normRealColor << " ";
                }
                file << endl;
            }file << endl;

我的所有图像都是8 * 8大小的B&amp; W但它会返回给我:

-1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND 
-1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND 
-1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND 
-1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND 
-1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND 
-1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND 
-1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND 
-1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND -1.#IND

并不总是返回!!!我不时得到像

这样的东西
0 0 0 0.166667 0.166667 0.333333 0.333333 0.333333 
0.166667 0.166667 0.166667 0.333333 0.333333 0.5 0.5 0.5 
0.333333 0.333333 0.5 0.5 0.666667 0.666667 0.666667 0.833333 
0.5 0.5 0.666667 0.666667 0.833333 0.833333 0.833333 1 
0.666667 0.666667 0.666667 0.833333 0.833333 1 1 1 
0.5 0.666667 0.666667 0.666667 0.833333 0.833333 1 1 
0.5 0.5 0.5 0.666667 0.666667 0.833333 0.833333 0.833333 
0.333333 0.5 0.5 0.5 0.666667 0.666667 0.833333 0.833333 

有什么想法吗?

BTW(我知道有cvNormalize(source,source,1,0,CV_MINMAX);但我需要使用手写代码......)

4 个答案:

答案 0 :(得分:5)

这是除以0的结果,这意味着diff为0,这意味着您的一些图像是“平坦的”,因此minVal == maxVal

答案 1 :(得分:4)

RealColor是双倍的。 values是一个int数组。你把所有东西都推到了一边,而不顾你失去的东西。

minval / maxval是整数,但是当你拿出它们的差值时,你将它放入浮点数。这不会让你神奇地恢复你的精确度。它消失了。

使minval,maxval和值成为双精度而不是整数。并处理div / 0案例。试试看,看看它是否更好。

答案 2 :(得分:1)

diff不经意地为0.0,这意味着

min_element(值(值+ WH)); max_element(值(值+ WH));没有做你认为的事情

或您的图片错误(您是否正在检查是否正在加载有效图片?)

答案 3 :(得分:1)

如果dif0.0,那么你最终会得到像你这样的无穷大。