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
相关产品推荐
相关产品推荐

