c++ - MAT channel 的平均值

标签 c++ image-processing opencv computer-vision

我想获得 MAT 和 MatND 变量的平均值,只是为了估计锐度和亮度。然而,我一直面临着我所遇到的模糊值(value)观的实际问题。我尽力了,但仍然感到困惑。我真的不知道,如果我在做正确的事。

    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 的亮度 channel 的直方图,它是 YUV 格式并对值进行平均。我做的对吗?如果我更改 <' '> 中的数据类型,范围从 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 开始,到用于总数和平均值的 long int。它是一个灰度图像,结果是拉普拉斯卷积图像。

最佳答案

在 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

关于c++ - MAT channel 的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14349717/

相关文章:

c++ - "fastfwd"文件可以是管道/套接字/fifo

c++ - std::vector - 如何释放 vector 中 char* 元素的内存?

c++ - 在线程内部函数上使用哪种保护方法(mutex、readwritelock ..)

algorithm - photoshop抠图滤镜是如何实现的?

c++ - 如何使用 OpenCV 从表中检测行和列

c++ - OpenCV C++ image.reshape 无法正常工作?

Python OpenCV 如何在矩形内绘制图像的矩形中心和裁剪图像?

c++ - 使用fopen创建新文件时如何设置FILE*对象编码格式?

python - Python 中的 Hough 变换 - 结果偏移不正确 - 索引错误?

image - 在房间图像中查找所有不同的对象/封闭多边形