Python 显示图像的多个直方图

Python 显示图像的多个直方图,python,matplotlib,computer-vision,histogram,Python,Matplotlib,Computer Vision,Histogram,我有4张图片,我试图用4个子图在一个图中显示它们的直方图 我已经调试过了,分配的img值总是会改变,我不知道为什么第一张图像的直方图会覆盖所有其他直方图 最终结果是,它显示了相同的直方图4次 img_path_fldr = '/home/some_folder' files_lst = os.listdir(img_path_fldr) img_lst = [x for x in files_lst if x.endswith('jpg') or x.endswith('.png')] fig

我有4张图片,我试图用4个子图在一个图中显示它们的直方图

我已经调试过了,分配的
img
值总是会改变,我不知道为什么第一张图像的直方图会覆盖所有其他直方图

最终结果是,它显示了相同的直方图4次

img_path_fldr = '/home/some_folder'
files_lst = os.listdir(img_path_fldr)
img_lst = [x for x in files_lst if x.endswith('jpg') or x.endswith('.png')]

fig, ax = plt.subplots(nrows=2, ncols=2)

for row in ax:
    for col in row:
        color = ('b')
        for j, col1 in enumerate(color):
            for i in img_lst:
                img = cv.imread(os.path.join(img_path_fldr, i))
                histr = cv.calcHist([img], [j], None, [256], [0, 256])
                col.plot(histr, color=col1)

plt.show()

我不喜欢你一个接一个的for循环。在我看来,下面的代码可以满足您的要求

fig, axes = plt.subplots(nrows=2, ncols=2)

for ax, file in zip(axes.flat, img_lst):
    img = cv.imread(os.path.join(img_path_fldr, file))
    histr = cv.calcHist([img], [0], None, [256], [0, 256])
    ax.plot(histr, color=col1)

plt.show()

按照循环的方式,在每个ax中,您都在做相同的事情(读取图像并计算直方图)。因此,在每个子图中,您都在绘制相同的内容,即上一幅图像的直方图。你需要重写你的循环。