【问题标题】:How to calculate image histogram of 32bit floating point image in OPenCV如何在 OPenCV 中计算 32 位浮点图像的图像直方图
【发布时间】:2014-11-05 12:52:57
【问题描述】:

我想计算图像的直方图,像素的类型为 32F(32 位浮点)。 “calcHist”函数的参数值应该是什么: - 暗淡 - 垃圾箱 - 范围

【问题讨论】:

  • 等一下。首先解释一下,you 将如何对浮点数据进行 bin ;)
  • 这就是问题所在。浮点表示值介于 0 和 1 之间,可能是数百万个可能的值。
  • 有一个将 32F Mat 映射到 unsigned char Mat 的 opencv 函数。然后你可以简单地调用 calcHist 函数。它会为您提供可能对您来说足够好的直方图的近似值。
  • 那是什么函数?
  • 转换为:docs.opencv.org/doc/user_guide/ug_mat.html。你可以做一个基础研究来发现

标签: opencv histogram


【解决方案1】:

嗯,我已经做过很多次了。像这样:

cv::Mat matSrc;    // this is a CV_32FC1 normalised image

int nHistSize = 65536;
float fRange[] = { 0.0f, 1.0f };
const float* fHistRange = { fRange };

cv::Mat matHist;
cv::calcHist(&matSrc, 1, 0, cv::Mat(), matHist, 1, &nHistSize, &fHistRange);

正如in the documentation 所说,描述源数组:

源数组。它们都应该具有相同的深度, CV_8U 或 CV_32F , 和相同的大小。它们中的每一个都可以有任意数量的 渠道。

所以支持 CV_32F。在这种情况下,范围(在我的示例中为 0.0 到 1.0)被分箱到所需的箱数中(在我的示例中为 65536)。

【讨论】:

  • 这会对具有全亮度像素(即 1.0)的图像产生问题,因为限制的上限是独占 per docs。相反,你可以试试float fRange[] = { 0.f, 1.f + FLT_EPSILON };
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 2014-04-05
  • 2011-08-12
  • 1970-01-01
相关资源
最近更新 更多