Квантовать значения изображения - PullRequest
0 голосов
/ 06 декабря 2011

Я работаю в OpenCV под Linux. Я пытаюсь квантовать значения векторов Ib, Ig, Ir, которые имеют длину 100.

for (int i=0;i<img31->height;i++)
       {
           for (int j=0;j<img31->width;j++)
             {
                 Ib.push_back(((uchar*)(img31->imageData+((img31->width*3)*i)))[j*3]);
                 Ig.push_back(((uchar*)(img31->imageData+((img31->width*3)*i)))[j*3+1]);
                 Ir.push_back(((uchar*)(img31->imageData+((img31->width*3)*i)))[j*3+2]);

             }
        }

       int g_hist11[16]={0},b_hist11[16]={0},r_hist11[16]={0};

    //Quantization code

       for (int i=0;i<Ig.size();i++)
           {
           int j=0;

               while(j<256)
               {
                   if (Ib.at(i)>j && Ib.at(i)<j+16)
                   {
                       b_hist11[(Ib.at(i)%16)]=b_hist11[(Ib.at(i)%16)]+1;

                   }
                if (Ig.at(i)>j && Ig.at(i)<j+16)
                   {
                                   g_hist11[(Ig.at(i)%16)]=g_hist11[(Ig.at(i)%16)]+1;

                   }
                if (Ir.at(i)>j && Ir.at(i)<j+16)
                   {
                                   r_hist11[(Ir.at(i)%16)]=r_hist11[(Ir.at(i)%16)]+1;

                   }
                j=j+16;

               }
           }

Но когда я пытаюсь добавить счетчики, хранящиеся в массивах g_hist11, r_hist11, b_hist11, они не получаются равными 100.

1 Ответ

1 голос
/ 06 декабря 2011

Вы используете открытые интервалы, но при этом пропускаются любые значения, которые являются точными коэффициентами, кратными 16. Вы должны использовать полузакрытые интервалы:

if (Ib.at(i) >= j && Ib.at(i) < j + 16)
//           ^^
...