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

如何用Python通过f.open读取test.png并实现与numpy数组的互转?

没问题,这事儿其实挺简单的,我给你拆成读取转数组和数组转存文件两个方向来细说,用Python的话主要靠PIL(Pillow)和NumPy这俩库配合就行:

1. 读取PNG文件并转为NumPy数组

首先得确保你装了Pillow和numpy(没装的话用pip install pillow numpy搞定)。步骤很直接:

import numpy as np
from PIL import Image

# 用open以二进制模式打开文件(必须用rb,PNG是二进制格式)
with open('test.png', 'rb') as f:
    # 用PIL加载文件对象里的图像
    img = Image.open(f)
    # 直接转成NumPy数组
    img_array = np.array(img)

解释下:

  • img_array的形状是(高度, 宽度, 通道数):比如普通RGB图是3通道,带透明层的RGBA是4通道,灰度图是单通道。
  • 数组里的元素类型默认是uint8(0-255的整数),对应图像的像素值。
2. 将NumPy数组转回PNG文件保存

逆向操作也不难,核心是把数组转回PIL的Image对象,再写入文件:

# 先把数组转回Image对象——注意要确保数组是uint8类型(PNG像素的标准格式)
img_from_array = Image.fromarray(img_array.astype('uint8'))

# 用open以二进制模式写入文件(wb模式)
with open('output.png', 'wb') as f:
    # 保存时指定格式为PNG,避免后缀出错的问题
    img_from_array.save(f, format='PNG')

一些小提醒:

  • 如果你的数组是其他数据类型(比如float),一定要先转成uint8,不然保存出来的图像会全黑或者乱掉。
  • 如果是用OpenCV处理的话,注意它读出来的是BGR顺序,转PIL的时候要先转成RGB,但用上面的方法是最通用的,和图像的常规显示顺序一致。
  • 全程必须用二进制模式读写(rb/wb),用文本模式的话会破坏PNG的二进制结构,导致文件损坏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:00:25