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

Pillow调用.show()方法显示二维数组转灰度图像时出现显示异常

异常原因
  • 变量调用错误:你完成最大池化计算得到结果arr2后,调用Image.fromarray时传入的仍是原始图像数组arr,并未使用池化后的结果。
  • 数据类型不匹配:maxPool函数内通过np.zeros创建的数组默认是float64浮点类型,而PIL的L(8位灰度)模式要求输入为取值0-255的uint8整数类型,直接传入浮点数组会导致PIL对像素值解析错误,出现和预期不符的显示效果。
修复方案

调整主逻辑的代码,传入池化后的数组并做类型转换即可:

import numpy as np
from PIL import Image

def maxPool(arr,s):
    if (arr.shape[0] % s != 0 or arr.shape[1] % s != 0):
        print("Max pooling not compatible with image dimensions!")
        return
    rows = int(arr.shape[0] / s)
    cols = int(arr.shape[1] / s)
    nar = np.zeros([rows, cols])
    for i in range(rows):
        for j in range(cols):
            nar[i,j] = arr[i * s:i * s + s, j * s:j * s + s].max()
    # 函数内提前完成类型转换,减少后续重复操作
    return nar.astype(np.uint8)

# 主方法逻辑
arr = np.array(Image.open("dino.jpg").convert('L')) # 提前转灰度避免原图是三通道带来的潜在问题
arr2 = maxPool(arr,2)
# 传入池化后的arr2生成图像
i2 = Image.fromarray(arr2,'L')
i2.show()

额外优化说明:读取原图时添加convert('L')主动转灰度,避免原图是三通道彩色图时,池化逻辑处理三维数组带来的异常。

内容的提问来源于stack exchange,提问作者Henrique Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:15:03