image - 函数calcHist()给我们带来了什么

标签 image opencv computer-vision histogram entropy

我的问题是当我们对直方图进行归一化时,是否有任何内置函数,如果不是很明显,我们可以使用calcHist()函数来计算图像的直方图,但是归一化直方图的公式为Nk/N,那么calcHist返回的是此公式中的N,或者我们必须自己计算N,它在熵公式中的作用是什么

最佳答案

我不确定我能收到你的问题。但是,这是一个简单示例,说明如何使用OpenCV获取灰度图像的l1归一化直方图。

在图像的情况下,N是可以简单地通过将图像的宽度和高度相乘来计算的像素数。然后,只需将直方图除以N即可。

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;

int main(int argc, char** argv)
{
    Mat img = imread(argv[1],CV_LOAD_IMAGE_GRAYSCALE);
    Mat hist;

    int channels[] = {0};
    int histSize[] = {32};
    float range[] = { 0, 256 };
    const float* ranges[] = { range };

    calcHist( &img, 1, channels, Mat(), // do not use mask
         hist, 1, histSize, ranges,
         true, // the histogram is uniform
         false );

   Mat histNorm = hist / (img.rows * img.cols);

   return 0;
}

为了获得示例,我从OpenCV documentation修改了一个示例。

如果要使用此直方图计算熵,则可以执行以下操作:

double entropy = 0.0;
for (int i=0; i<histNorm.rows; i++)
{
    float binEntry = histNorm.at<float>(i,0);
    if (binEntry != 0.0)
        entropy -= binEntry * log2(binEntry);
}

关于image - 函数calcHist()给我们带来了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18557450/

相关文章:

iphone - 如何更改 UIActivityIndi​​catorView 以设置自定义图像?

Python OpenCV - 从一组轮廓点外推最大的矩形

python - 如何检测哪些圆圈被填充 + OpenCV + Python

c++ - 从物体的不同角度找到一个好的单应性?

asp.net - 如何在 ASP.NET 中设置图片作为背景?

javascript - 在 Canvas 中旋转图像

c++ - 在 OpenCV 中从 RGB 图像访问 channel 的更快方法?

.net - 计算机视觉库

opencv - Viola Jones 人脸检测框架

Prezi 格式的图像到视频