如何用Python绘制图像的均衡直方图?

如何用Python绘制图像的均衡直方图?,python,image-processing,matplotlib,Python,Image Processing,Matplotlib,这是我的代码。变量img是原始图像。变量eq是均衡图像 from matplotlib.pyplot import imread, imshow, show, subplot, title, get_cmap, hist from skimage.exposure import equalize_hist img = imread('images/city.tif') eq = equalize_hist(img) subplot(221); imshow(img, cmap=get_cm

这是我的代码。变量img是原始图像。变量eq是均衡图像

from matplotlib.pyplot import imread, imshow, show, subplot, title, get_cmap, hist
from skimage.exposure import equalize_hist


img = imread('images/city.tif')
eq = equalize_hist(img)

subplot(221); imshow(img, cmap=get_cmap('gray')); title('Original')
subplot(222); hist(img.flatten(), 256, range=(0,256)); title('Histogram of      origianl')
subplot(223); imshow(eq, cmap=get_cmap('gray'));  title('Histogram Equalized')
subplot(224); hist(eq.flatten(), 256, range=(0,256));

show()
现在当我运行代码时,我得到了原始的直方图。但均衡后的直方图是不正确的。这是我所有的输出

我做错了什么

编辑:来自的内置matlab命令可以很好地用于特定图像


它似乎正在将图像从
uint8
格式(0到255之间的整数值)转换为
float32
float64
格式(0到1之间的浮点值)。尝试
eq=np.asarray(equalize_hist(img)*255,dtype='uint8')
它似乎正在将图像从
uint8
格式(0到255之间的整数值)转换为
float32
float64
格式(0到1之间的浮点值)。尝试一下
eq=np.asarray(equalize_hist(img)*255,dtype='uint8')

哦,你在第二次
hist()调用中忘记了一个
=
。这里有
范围(0256)
而不是
范围=(0256)
我已经修好了,谢谢。这只会输出一个“太多的值,无法解包”。这不会影响Historogram的问题,因为值仅在0和1之间。我不这么认为。我对许多灰度图像使用了相同的算法,并且输出不变。我会查看@User的建议,它完全符合症状。
equalize\u hist
的输出值似乎是
[0.0,1.0)
范围内的浮点数。哦,您在第二次
hist()
调用中忘记了一个
=
。这里有
范围(0,256)
而不是
范围=(0,256)
我已经修复了它,谢谢。这只是输出了一个“太多的值需要解包”。这不会影响Historogram的问题,因为这些值仅在0和1之间。我不这么认为。我对许多灰度图像使用了相同的算法,并且输出没有改变。我会查看@User的建议,它完全符合症状
equalize\u hist
的输出值似乎是介于
[0.0,1.0)
范围内的浮点数。非常感谢Fooz先生。它工作得非常好。非常感谢Fooz先生。它工作得非常好