Tensorflow:调整不同大小的图像列表的大小

时间:2019-02-17 16:23:20

标签: python tensorflow

我创建了图像列表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.'

我该怎么办?

1 个答案:

答案 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) 将不同形状的数组列表转换为张量。您需要对每个数组进行一次转换,然后将结果张量堆叠在一起。