Python中如何用plt.imshow()显示自定义函数分割的2×2图像块?
用plt.imshow()显示自定义分割后的图像
你之前用plt.bar()完全找错了方向——plt.bar()是用来画柱状图的,和显示图像块没有关系。要展示分割后的2×2图像区域,得用子图布局配合plt.imshow()逐个渲染每个分割块。
正确实现步骤
- 导入所需依赖库:
numpy、matplotlib.pyplot,以及图像加载工具(比如PIL.Image或cv2) - 加载目标图像
- 调用你写的
split()函数生成2×2的图像数组 - 遍历分割后的图像块,通过子图依次展示
完整示例代码
import numpy as np import matplotlib.pyplot as plt from PIL import Image # 也可以用cv2替代PIL加载图像 # 你的自定义图像分割函数 def split(img, nbxsplit, nbysplit): xpart = int(img.shape[0] / nbxsplit) ypart = int(img.shape[1] / nbysplit) arr = [] for i in range(0, img.shape[0]-xpart+1, xpart): for j in range(0, img.shape[1]-ypart+1, ypart): arr.append(img[i:i+xpart,j:j+ypart]) a = np.array(arr) a = np.reshape(a, (nbxsplit,nbysplit)) return a # 1. 加载图像,替换为你的实际图像路径 img = np.array(Image.open("your_image.jpg")) # 2. 分割为2×2的图像块 split_imgs = split(img, 2, 2) # 3. 创建2×2子图布局并显示每个分割块 fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 8)) for i in range(2): for j in range(2): axes[i][j].imshow(split_imgs[i][j]) axes[i][j].axis('off') # 隐藏坐标轴,让图像展示更整洁 plt.tight_layout() # 自动调整子图间距 plt.show()
额外提示
- 如果是灰度图像,调用
imshow()时需要加上cmap='gray'参数,比如axes[i][j].imshow(split_imgs[i][j], cmap='gray') - 你的
split()函数在图像尺寸无法被分割数整除时,会丢失边缘部分像素;如果要保留完整图像,可以考虑用np.array_split替代手动循环实现分割
内容的提问来源于stack exchange,提问作者Hi Chem
相关产品推荐
相关产品推荐

