Python中Image与Ndarray互转及np.array与np.asarray区别解析

程一诺
程一诺
发布时间:2026-10-13| 5人浏览过
原创

本文详解Python中PIL Image与NumPy Ndarray的相互转换方法,对比keras相关API实现。重点分析np.array与np.asarray在内存拷贝行为上的差异,通过源码揭示img_to_array与array_to_img的实现原理,帮助开发者在模型处理中优化内存使用。

Python中Image与Ndarray互转及np.array与np.asarray区别解析

在Python图像处理中,将PIL的Image对象转换为NumPy的Ndarray是常见操作。


import numpy as np
from PIL import Image

img = Image.open(filepath)
img_convert_ndarray = np.array(img)
ndarray_convert_img= Image.fromarray(img_convert_ndarray )


# np.array(object) 这个函数很强大啊,看源码里面给的注释
# object : array_like
#      An array, any object exposing the array interface, an object whose
#      __array__ method returns an array, or any (nested) sequence.

此外,Keras库也提供了专用的API接口来完成此类转换任务。


from keras.preprocessing.image import img_to_array, array_to_img

但在深入查看相关源码后,可以发现这些高层封装函数的底层实现逻辑其实高度一致。

具体而言,img_to_array()函数内部调用的是np.asarray(),而反向转换的array_to_img()则依赖于Image.fromarray()方法。

需要区分的是,np.array()用于创建一个新的Ndarray对象,而np.asarray(object)则是将现有对象转换为Ndarray格式。两者在内存处理机制上存在关键差异。


np.asarray(a):
  return np.array(a,copy=False)

# 而np.array()里copy默认为True,那这有什么区别呢?
import numpy as np

  a = np.array([1, 2])
  b = np.asarray(a)
  c = np.asarray(a)
  print(type(b), type(c), b is c) # True
  e = np.array(a)
  f = np.array(a)
  print(type(e), type(f), e is f) # False

  a = [1, 2]
  b = np.asarray(a)
  c = np.asarray(a)
  print(type(b), type(c), b is c) # False
  e = np.array(a)
  f = np.array(a)
  print(type(e), type(f), e is f) # False

以上内容涵盖了Python实现Image和Ndarray互相转换的核心要点,供读者参考与实践。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。