我创建了图像列表L
,其中包含不同尺寸的图像:
L =
(1, 333, 500, 3)
(1, 500, 333, 3)
(1, 257, 296, 3)
这些图像的数据类型为np.uint8
。
我的目标是将这些图像传递给函数process_images()
,该函数将图像重新整形为预定义的大小size = [100,100]
并返回以下列表
L_new =
(1, 100, 100, 3)
(1, 100, 100, 3)
(1, 100, 100, 3)
或大小为[3,100,100,3]
的numpy数组。
处理图像的功能定义如下:
def process_images(X):
X = tf.convert_to_tensor(X, dtype=tf.uint8)
X = tf.image.resize_images(X, size=[100,100])
return X
到目前为止,如果我致电img=sess.run(process_images(L))
,我会得到一个错误:
TypeError: Expected uint8, got array([[[[ 0, 91, 127],
[ 17, 94, 122],
[ 39, 90, 85],
...,
[ 67, 128, 87],
[ 71, 129, 88],
[ 71, 130, 86]]]], dtype=uint8) of type 'ndarray' instead.'
我该怎么办?
答案 0 :(得分:0)
我更改了答案,因为我错过了问题描述中的一些要点。这是正确的答案:
df['UniqueId'] = df.TeamId.map(dfp.sort_values(dfp.columns.tolist())
.diff().abs().any(1).cumsum())
print (df)
Id TeamId UserId UniqueId
0 43 504 722 1
1 44 504 727 1
2 45 601 300 3
3 46 602 722 1
4 47 602 727 1
5 48 605 300 3
6 49 777 300 4
7 50 777 301 4
8 51 788 400 2
9 52 789 400 2
10 53 100 727 0
这是初始数组和最终结果的形状
def process_image(x):
x = tf.convert_to_tensor(x, dtype=tf.uint8)
return tf.image.resize_images(x, size=[100,100])
def process_list(X):
L = [process_image(x) for x in X]
return tf.stack(L, axis=0)
import matplotlib.image as mpimg
imgs=[mpimg.imread('nadine.jpg'), mpimg.imread('andy.jpg')]
shapes= [img.shape for img in imgs]
with tf.Session() as sess:
imgs1=sess.run(process_list(imgs))
print(shapes)
print(imgs1.shape)
重点是您无法使用[(1077, 1280, 3), (2946, 3930, 3)]
(2, 100, 100, 3)
将不同形状的数组列表转换为张量。您需要对每个数组进行一次转换,然后将结果张量堆叠在一起。