image-processing - minMaxLoc 最大值混淆

标签 image-processing opencv computer-vision vision

我一直在使用 minMaxLoc 来计算通过在灰度图像上运行拉普拉斯滤波器获得的数据的最大值。我的简单意图是粗略估计锐度。我遇到了一个令人困惑的情况,我已经在这里讨论过。

对于一组图像,从 minMaxLoc 函数获得的最大值如 1360、1456,450 等。

    Laplacian(src_gray,dst,ddepth,kernel_size,scale,delta,BORDER_DEFAULT);
    minMaxLoc(dst,&min,&estimate,&minLoc,&maxLoc,noArray());//Estimate is the max value

现在我只是尝试计算平均值,以便更好地了解图像中清晰度的分布。请注意,DST 是保存拉普拉斯算子数据的 Mat 变量。

    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 + abs(dst.at<int>(k,l));
      }
    }
    average = total/(rows*cols);

我得到了 2 个莫名其妙的结果。我获得的平均值不仅大于从 minMaxLoc 获得的最大值,而且在对一组图像进行尝试时有时还为负值。样本平均值为 22567,有时为 -25678。

当我使用 abs() 来获取拉普拉斯算子结果的绝对值时,负值的出现更加令人困惑。

为了正确理解,我自己计算了最大值,然后计算了平均值:

    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++)
      {
        if(abs(dst.at<int>(k,l))>max)
        {
           max = abs(dst.at<int>(k,l));
        }
        total = total + abs(dst.at<int>(k,l));
       }
    }
    average = total/(rows*cols);

令人惊讶的是,我发现最大值是 8 位数字。

这就是我困惑的原因。 minMaxLoc 函数给出的最大值是多少?为什么 abs() 总的来说不起作用,为什么我得到 -ve 个平均值。?

如果代码中遗漏了某些内容,请原谅我,但这让我有些困惑。提前感谢您的帮助。

最佳答案

我认为你应该使用 .at 而不是 int(考虑到图像是灰度),否则值会溢出!

关于image-processing - minMaxLoc 最大值混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14282412/

相关文章:

javascript - 使用 OpenCV.JS 进行颜色检测

machine-learning - 现代 CNN(卷积神经网络)作为 DetectNet 旋转不变吗?

image-processing - 从图像中提取数字

java - Sanselan 与 Java-Image-io

image-processing - YUV420和YUV422之间的区别

python - Jupyter笔记本上的cv2导入错误

c++ - 使用 pow 进行 Gamma 校正

c++ - 将数据从 glReadPixels() 转换为 OpenCV::Mat

python - 找到最大的轮廓——OpenCV、Python——出现错误

tensorflow - 类似 MNIST 的问题。卷积神经网络