我正在阅读某人的transform.py,其中有一段代码确实使我感到困惑。在这里:
np.concatenate(img_group, axis=2)
但是,这里的img_group
是<class 'PIL.Image.Image'>
的序列,我浏览了np.concatenate()的文档,它告诉我:enter link description here
numpy.concatenate((a1,a2,...),axis = 0,out = None) 沿现有轴连接一系列数组。 参数: a1,a2,…: array_like序列 数组必须具有相同的形状,除了与轴对应的尺寸(默认为第一个)。
我尝试了一些示例,例如:
x = Image.open('flows/v_ApplyEyeMakeup_g08_c01/frame/img_00001.jpg').convert('RGB')
y = Image.open('flows/v_ApplyEyeMakeup_g08_c01/frame/img_00002.jpg').convert('RGB')
z = np.concatenate([x,y], axis=2)
然后它起作用了! z
是numpy.ndarray
类型,其大小为(240,320,6)。但是,<class 'PIL.Image.Image'>
似乎不是array
参数所需的np.concatenate()
类型,所以我想知道它是如何工作的?
答案 0 :(得分:1)
Numpy对array-like个对象进行操作。这是关于什么构成数组相似性的问题的link。 python对象类似于数组的一种方法是实现#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> A = {1,2,3,4,5};
cout << A[1];
return 0;
}
方法。这正是PIL.Image
所做的。
答案 1 :(得分:0)
如果您查看source
for PIL.Image
,将看到它具有名为__array_interface__
的属性,并且其下方的注释是:
#numpy数组接口支持。
我的猜测是numpy
使用此属性将图像转换为数组,因此能够将其作为一个数组进行处理。
也是Image
对象“ array_like”的属性。参见__array_interface__
。