Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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++_Image Processing_Opencv - Fatal编程技术网

C++ 图像像素之和

C++ 图像像素之和,c++,image-processing,opencv,C++,Image Processing,Opencv,我尝试将黑白区域的像素值相加,方法是将图像划分为块的网格,然后得到每个块的像素值之和 当我打印每个的值时,值都是相同的=255。 我的问题是:为什么会发生这种情况?有些块只有黑色像素,有些块有黑色和白色 double* divide (Mat I) { //double* pointer; static double* sums= new double [9]; //pointer= sums[0];

我尝试将黑白区域的像素值相加,方法是将图像划分为块的网格,然后得到每个块的像素值之和

当我打印每个的值时,值都是相同的=255。 我的问题是:为什么会发生这种情况?有些块只有黑色像素,有些块有黑色和白色

double* divide (Mat I)
         {
             //double* pointer;
         static double*  sums= new double [9];
        //pointer= sums[0];
          //double sums2[10];

          Mat block;
              //Mat block2;

    int numberblocks=9; 
    int bh;
    int bw;
    //int bh2;
    //int bw2;

    bh=I.cols/numberblocks;
    bw=I.rows/numberblocks; 
    //bh2=u.cols/numberblocks;
    //bw2=u.rows/numberblocks; 
    //
    double blockarea=bh*bw;
    //double num=0;
    //double blockarea2=bh2*bw2;

    //int r=0;
    //int c=0;
    //int err=0;

    for(int a=0;a<9;a++)
    {
       for (int r = 0; r < I.rows; r += bw)
       {
             for (int c = 0; c < I.cols; c += bh)
                 {

                 block  = I(cv::Range(r, min(r + bw, I.rows)),cv::Range(c, min(c + bh, I.cols)));


                  }
       }
       double sum=0;

         for(int i=0;i<block.rows;i++)
         {
             for(int j=0;j<block.cols;j++)
                 {
                sums[a] = sum + block.at<uchar>(i,j); //sums[k-1] + block.at<uchar>(i,j);
             }
         }
         cout<<"sum of"<<a<<"is"<<sums[a]<<endl;


    }


return sums;

}    
double*divide(材料一)
{
//双*指针;
静态双精度*总和=新双精度[9];
//指针=和[0];
//双槽2[10];
垫块;
//垫块2;
int numberblocks=9;
内特波黑;
int-bw;
//int bh2;
//int bw2;
bh=I.cols/numberblock;
bw=I.行/数块;
//bh2=单位cols/numberblock;
//bw2=u.行/数字块;
//
双块面积=bh*bw;
//双数=0;
//双闭塞区2=bh2*bw2;
//int r=0;
//int c=0;
//int err=0;
对于(int a=0;a行

和[a]=和+块在(i,j)处


看起来很奇怪。sums[a]总是块的最后一个元素的值。如果这是碰巧的,总是255,你可以解释一下。

我想这样就可以了

     for(int i=0;i<block.rows;i++)
     {
         for(int j=0;j<block.cols;j++)
             {

              sum = sum + block.at<uchar>(i,j); //sums[k-1] + block.at<uchar>(i,j);
         }
     }
     sums[a]=sum;

用于(int i=0;i如果您想让我们查看代码,请确保正确设置代码的格式。它看起来越好,帮助就越容易。一步一步地调试代码并检查每个变量的值。您会发现您没有正确存储总和。也许您需要定义另一个变量。换句话说,您从未设置总和,所以当我试着这样做的时候:-'double sum=block.at(0,0);for(int I=0;I
     for(int i=0;i<block.rows;i++)
     {
         for(int j=0;j<block.cols;j++)
             {

               sums[a] =  sums[a] + block.at<uchar>(i,j); //sums[k-1] + block.at<uchar>(i,j);
         }
     }