1

使用以下代码行,我想打印给定图像的 rgb 直方图。总体结果很好,但是将三个直方图与使用 gimp 获得的直方图进行比较,我注意到直方图中的一些 bin 丢失了,我的意思是有一个白色值,其中应该有一个与 0 不同的像素数与之相关联语气。

这是我的代码:

im = np.array(Image.open('myimage.jpg'))

plt.figure()
plt.hist(im[:,:,0].flatten(), 256, color='red', label='Histogram Red')

plt.figure()
plt.hist(im[:,:,1].flatten(), 256, color='green', label='Histogram Green')

plt.figure()
plt.hist(im[:,:,2].flatten(), 256, color='blue', label='Histogram Blue')

plt.show()
4

1 回答 1

3

您还没有真正提供足够的信息来回答您的问题,但我的猜测是您遇到了 bin 边缘的问题。像您一样提供多个 bin 会将您的数据范围划分为 256 个 bin,但您的数据在 [12,230] 范围内(即np.min(img[:,:0]) == 12np.max(img[:,:,0]) == 230),那么您的 bin 宽度将小于 1,您可能会得到奇怪的混叠。我会改为使用

 plot.hist(...,bins=arange(0,257) - .5,...)

哪个明确地传入 bin 边缘以使用(我推断您的数据是 8 位整数)。这将为您提供 256 个柱,以整数为中心。

出于美学原因,我还会添加lw=0以消除每个条形周围的黑色轮廓。

于 2013-01-18T15:47:20.760 回答