将ndarray转换为灰度

时间:2018-04-11 15:48:54

标签: python image machine-learning

所以我有这种形状的ndarray

(39000, 64, 64, 3)

dtype=np.uint8

我试图在一个while循环中将所有39k图像转换为灰度

while(image_index<num_images):
    gray_dataset = np.dot(dataset[image_index,:,:], [0.299, 0.587, 0.114])
    image_index +=1

显然是在生产垃圾。你可以指导我做得好吗?

1 个答案:

答案 0 :(得分:1)

如果您想将dataset中的所有图像转换为浮点灰度格式,同时保留三个通道,您可以这样做:

# (39000, 64, 64, 1)
gray_dataset_1c = np.sum((dataset / 255.) * [0.299, 0.587, 0.114], axis=-1, keepdims=True)
# (39000, 64, 64, 3)
gray_dataset = np.tile(gray_dataset_1c, (1, 1, 1, 3))

np.dot

# (39000, 64, 64)
gray_dataset_1c = np.dot((dataset / 255.), [0.299, 0.587, 0.114])
# Since Python 3.5 this can be written like this:
gray_dataset_1c = (dataset / 255.) @ [0.299, 0.587, 0.114]
# (39000, 64, 64, 3)
gray_dataset = np.tile(gray_dataset_1c[..., np.newaxis], (1, 1, 1, 3))

在快速基准测试之后,似乎np.dot实际上显然更快。