如何在OPenCV中计算32位浮点图像的图像直方图

use*_*734 2 opencv histogram

我想计算图像像素类型为 32F(32 位浮点)的直方图。“calcHist”函数的参数值应该是什么: - dims - bins - range

Rog*_*and 6

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

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);
Run Code Online (Sandbox Code Playgroud)

正如描述源数组的文档中所说:

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

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

  • 这会对具有全强度像素(即 1.0)的图像产生问题,因为限制的上限是*独占*[每个文档](http://docs.opencv.org/2.4/modules/imgproc/doc/直方图.html)。相反,您可以尝试 `float fRange[] = { 0.f, 1.f + FLT_EPSILON };` (2认同)