Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 量化图像的值_C_Opencv_Histogram_Quantization - Fatal编程技术网

C 量化图像的值

C 量化图像的值,c,opencv,histogram,quantization,C,Opencv,Histogram,Quantization,我在Linux上的OpenCV中工作。我试图量化长度为100的向量Ib、Ig、Ir的值 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]);

我在Linux上的OpenCV中工作。我试图量化长度为100的向量Ib、Ig、Ir的值

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;

               }
           }
for(int i=0;iheight;i++)
{
for(int j=0;jwidth;j++)
{
Ib.push_back(((uchar*)(img31->imageData+((img31->width*3)*i))[j*3]);
Ig.推回((uchar*)(img31->imageData+((img31->width*3)*i))[j*3+1]);
红外推回((uchar*)(img31->imageData+((img31->width*3)*i))[j*3+2]);
}
}
int g_hist11[16]={0},b_hist11[16]={0},r_hist11[16]={0};
//量化码
对于(int i=0;i您使用的是开放区间,但这会忽略任何16的精确倍数。您应该使用半封闭区间:

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