图像像素的总和
sum of image pixels
我试图通过将图像划分为块网格并获取每个块的像素总和来对黑白区域的像素值求和。
当我打印每个值时,这些值都相同 = 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;
}
我认为这可以
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;
调试它以确保。如果不使用总和,它将是:
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);
}
}
行
总和[a] = 总和 + block.at(i,j);
看起来很奇怪。sums[a] 总是具有块的最后一个元素的值。如果这是偶然的总是 255,你有你的解释。
相关文章:
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 访问随机图像像素的快速方法,最多一次
- 计算另一个图像像素满足条件的像素值的平均值
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- 如何将像素图像导入cpp
- OpenCV-如何将vale添加到图像一部分的所有像素
- 访问和更改基于另一个图像的像素颜色-opencv c++
- 免费图像写入像素
- 可视化 如何获取图像中像素的颜色(以C++ (sfml) 为单位)
- 将像素打包在盒子中的 1 位/带宽/二进制图像中
- 如何使用 openCV 更改图像每个像素的颜色
- 使用 ImageMagick 从像素强度数组创建灰度图像时遇到问题
- 如何从C 中的CV :: MAT图像中有效提取某些像素
- OPENCV C .在for循环中在不同的图像像素上绘制一个圆圈(应在每个循环运行时将图像打开)
- 图像分割 - 删除C 中不需要的像素
- 如何使用Imebra库将压缩像素(用我自己的编码器压缩)回到DICOM图像文件中
- 如何确定 BMP 图像是否包含来自标题的 BGR 或 BGRA 像素
- 如何使用opencv在不丢失像素的情况下对图像进行去扭曲
- 内存中一个像素图像数据的表示形式
- 如何显示已保存在文件中的像素图像