You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何用plt.imshow()显示自定义函数分割的2×2图像块?

用plt.imshow()显示自定义分割后的图像

你之前用plt.bar()完全找错了方向——plt.bar()是用来画柱状图的,和显示图像块没有关系。要展示分割后的2×2图像区域,得用子图布局配合plt.imshow()逐个渲染每个分割块。

正确实现步骤

  1. 导入所需依赖库:numpy、matplotlib.pyplot,以及图像加载工具(比如PIL.Image或cv2)
  2. 加载目标图像
  3. 调用你写的split()函数生成2×2的图像数组
  4. 遍历分割后的图像块,通过子图依次展示

完整示例代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:55:16