我已经绘制了直方图
灰度图像
使用matplotlib。但是直方图看起来不像我想要的。
from matplotlib import pyplot as plt
import numpy as np
from PIL import Image
im=Image.open("lena.pgm")
pxl=list(im.getdata())
print pxl
columnsize,rowsize=im.size
a = np.array(pxl)
plt.hist(a, bins = 255)
plt.title("histogram")
plt.show()
我想要直方图
答案 0 :(得分:0)
直方图中的间隙是由于箱尺寸选择不当所致。如果调用hist(..., bins=255)
,numpy将从数组的最小值到最大值创建256个bin。换句话说,垃圾箱的宽度将为非整数(在我的测试中为[ 24. , 24.86666667, 25.73333333, 26.6 , ....]
)。
由于要处理的图像具有255个级别,因此应创建255个宽度为1的纸槽:
plt.hist(a, bins=range(256))
我们必须写256
,因为我们需要包括垃圾箱的最右边,否则将不包含值255的点。
关于颜色,请遵循问题linked in the comments
中的示例from PIL import Image
im=Image.open("lena.pgm")
a = np.array(im.getdata())
fig, ax = plt.subplots(figsize=(10,4))
n,bins,patches = ax.hist(a, bins=range(256), edgecolor='none')
ax.set_title("histogram")
ax.set_xlim(0,255)
cm = plt.cm.get_cmap('cool')
norm = matplotlib.colors.Normalize(vmin=bins.min(), vmax=bins.max())
for b,p in zip(bins,patches):
p.set_facecolor(cm(norm(b)))
plt.show()
答案 1 :(得分:0)
您可以像这样使用 plt.hist()
方法:
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('lena.png', 0)
plt.hist(img.ravel(), 256, (0, 256))
plt.show()
输出: