【问题标题】:Finding the median of a set of pictures using PIL and NumPy gives a black and white image使用 PIL 和 NumPy 找到一组图片的中值,得到黑白图像
【发布时间】:2016-01-18 23:06:44
【问题描述】:

我试图通过将一组图像转换为 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)

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

有人可以帮忙吗?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    您的输出图像是黑白的,因为您在第三维(即 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)
    

    【讨论】:

    • 这行得通,谢谢!我想补充一点,需要像这样转换图像:median_image = Image.fromarray(median_array.astype('uint8')) 否则 PIL 将不接受数据类型。
    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 2018-11-22
    • 2012-03-19
    • 2022-12-15
    • 2015-11-26
    • 2012-11-13
    • 2017-08-04
    • 1970-01-01
    相关资源
    最近更新 更多