我想获得MAT和MatND变量的平均值,只是为了估计锐度和亮度。但是,我一直面临着我遇到的模糊价值的真正问题。我尽我所能,但仍然感到困惑。我真的不知道,如果我做对了。
calcHist(&src_yuv,1,channels,Mat(),hist,1,histSize,ranges,true,false);
Size d = hist.size();
rows = d.height;
cols = d.width;
for(int k=0;k<hbins;k++)
{
for(int l=0;l<sbins;l++)
{
total = total + hist.at<float>(k,l);
}
}
brightness = total/(rows*cols);
这里,我试图计算src_yuv的亮度通道的直方图,它是YUV格式并对值进行平均。我是以正确的方式做到的吗?如果我在&lt;'中更改数据类型'&gt;,从uchar到long int,最后得到不同的值,这是可以理解的。但我不知道哪种是正确的数据类型。此外,我应该在hbins,sbins或rows,cols中循环吗?请帮我。我坚持了很久。
Laplacian(src_gray,dst,ddepth,kernel_size,scale,delta,BORDER_DEFAULT);
Size s = dst.size();
rows = s.height;
cols = s.width;
total = 0;
max = 0;
for(int k=0;k<rows;k++)
{
for(int l=0;l<cols;l++)
{
total = total + dst.at<>(k,l);
}
}
average = total/(rows*cols);
在上述情况下,计算平均值的确切方法是什么?你能帮帮我吗?我尝试了不同的数据类型,从in开始为mat,以及long int为total和averages。它是一个灰度图像,结果是拉普拉斯复杂的图像。
答案 0 :(得分:1)
在calcHist之前将输入src_yuv转换为BGR,您将获得具有相同代码的所需输出。
编辑:对于YUV: -
out = imread("Lena.jpg");
out.convertTo(out, CV_RGB2YCrCb);
MatND hist;
int hbins = 30, sbins = 32;
int histSize[] = {hbins, sbins};
float hranges[] = { 0, 180 };
float sranges[] = { 0, 256 };
int channels[] = {0,1,2};
const float* ranges[] = { hranges, sranges };
calcHist( &out, 1, channels, Mat(),
hist, 2, histSize, ranges,
true,
false );
Size d = hist.size();
int rows = d.height;
int cols = d.width;
float total;
float brightness;
for(int k=0;k<hbins;k++)
{
for(int l=0;l<sbins;l++)
{
total = total + hist.at<float>(k,l);
}
}
brightness = total/(rows*cols);
这使我的亮度为246.895