Python 使用PIL和NumPy查找一组图片的中间值可以得到黑白图像

Python 使用PIL和NumPy查找一组图片的中间值可以得到黑白图像,python,numpy,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) im

我试图通过将一组图像转换为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\u matrix.shape
我的特定图像的输出是
(326261,3)
,但当我运行
print median\u array.shape
时,我只得到
(326261)

由于某种原因,矩阵的该部分被切断,从而产生黑白图像


有人能帮忙吗?

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

image_stack = np.concatenate([im[..., None] for im in image_matrices], axis=3)
image\u stack.shape
随后将是
(3262613,nimages)
。现在您可以在第四维上取中间值:

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

这很有效,谢谢!我想补充一点,需要这样转换图像:
median\u image=image.fromarray(median\u array.astype('uint8'))
否则PIL将不接受该数据类型。