Python中Image与Ndarray互转及np.array与np.asarray区别解析
本文详解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互相转换的核心要点,供读者参考与实践。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













