You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

np.histogram与cv2.calcHist直方图结果差异及调整方法问询

np.histogram与cv2.calcHist直方图计数差异原因及解决方法

差异根源:区间包容性规则不同

  • numpy.histogram:默认采用左闭右开区间划分,但最后一个区间是左闭右闭(包含range参数的上限值)。以你的示例为例,10个分箱的区间为:[0.0,0.1), [0.1,0.2), ..., [0.9,1.0],等于1.0的像素会被计入最后一个分箱。
  • cv2.calcHist:所有区间均为左闭右开,最后一个区间是[0.9,1.0),等于1.0的像素不会被计入任何分箱——这就是你看到最后一个计数少1的核心原因(你的数据里存在1个值为1.0的像素)。

让cv2.calcHist包含右区间的调整方法

最简便的方式是微调range的上限值,使其略大于原上限,让等于原上限的像素能落入最后一个左闭右开区间:

# 将range上限设为1.0 + 极小值(如1e-8,避免浮点精度问题)
cv_hist_img_1 = cv2.calcHist([img_1.ravel()], [0], None, [10], [0.0, 1.0 + 1e-8])

调整后,原来等于1.0的像素会被包含在[0.9, 1.0+1e-8)区间内,最终计数会与np.histogram结果一致。

内容的提问来源于stack exchange,提问作者Al_Mt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:54:23