我正在尝试将一组图像转换为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)
。
由于某种原因,矩阵的那部分被切断,导致黑白图像。
任何人都可以帮忙吗?
答案 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)