我想创建一个矩阵子图并显示每个BMP文件,从一个目录,在不同的子图中,但我找不到适合我的问题的解决方案,有人可以帮我吗?
这是我的代码:
import os, sys
from PIL import Image
import matplotlib.pyplot as plt
from glob import glob
bmps = glob('*trace*.bmp')
fig, axes = plt.subplots(3, 3)
for arch in bmps:
i = Image.open(arch)
iar = np.array(i)
for i in range(3):
for j in range(3):
axes[i, j].plot(iar)
plt.subplots_adjust(wspace=0, hspace=0)
plt.show()
执行后我遇到以下错误:
答案 0 :(得分:15)
原生matplotlib仅支持PNG图像,请参阅http://matplotlib.org/users/image_tutorial.html
然后方式总是读取图像 - 绘制图像
读取图片
img1 = mpimg.imread('stinkbug1.png')
img2 = mpimg.imread('stinkbug2.png')
情节图像(2个子图)
plt.figure(1)
plt.subplot(211)
plt.imshow(img1)
plt.subplot(212)
plt.imshow(img2)
plt.show()
按照http://matplotlib.org/users/image_tutorial.html上的教程(因为导入库)
这是一个用matplotlib绘制bmps的线程:Why bmp image displayed as wrong color with plt.imshow of matplotlib on IPython-notebook?
答案 1 :(得分:1)
bmp有三个颜色通道,加上高度和宽度,形状为(h,w,3)。我相信绘制图像会给你一个错误,因为该图只接受两个维度。您可以对图像进行灰度渲染,这将生成仅有两个维度(h,w)的矩阵。
在不知道图像尺寸的情况下,你可以这样做:
for idx, arch in enumerate(bmps):
i = idx % 3 # Get subplot row
j = idx // 3 # Get subplot column
image = Image.open(arch)
iar_shp = np.array(image).shape # Get h,w dimensions
image = image.convert('L') # convert to grayscale
# Load grayscale matrix, reshape to dimensions of color bmp
iar = np.array(image.getdata()).reshape(iar_shp[0], iar_shp[1])
axes[i, j].plot(iar)
plt.subplots_adjust(wspace=0, hspace=0)
plt.show()