使用PIL和NumPy查找一组图片的中位数可得到黑白图像

时间:2016-01-18 23:06:44

标签: python numpy

我正在尝试将一组图像转换为NumPy数组并找到数组的元素中位数,从而产生一个数组。然后我将此数组转换回图像。

以下是代码的相关部分:

images_matrices = []

for photo in get_photos(): #just gets a list of photo filenames
    image_matrix = np.array(open_image(photo))
    images_matrices.append(image_matrix)

image_stack = np.dstack(tuple(images_matrices)) 
median_array = np.median(image_stack, axis=2)

median_image = Image.fromarray(median_array)

save_image(median_image, "out.jpg")

当我运行此代码时,我确实得到了一张中间图像,就像我想要的那样,但它是黑白的。

如果我运行print image_matrix.shape我的特定图片的输出为(326, 261, 3),但当我运行print median_array.shape时,我只会(326, 261)

由于某种原因,矩阵的那部分被切断,导致黑白图像。

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

您的输出图像是黑白的,因为您在第三维(即RGB通道)上取中位数。您需要将图像堆叠在除第三维以外的某个维度上,例如在第四维度上:

image_stack = np.concatenate([im[..., None] for im in image_matrices], axis=3)

image_stack.shape将成为(326, 261, 3, nimages)。现在你可以把中位数放在第四维度上:

median_image = np.median(image_stack, axis=3)