实际上,这个问题已被多次回答。但是,由于声誉“太低”,我不允许对答案添加评论,我想讨论the most comprehensive answer中提出的解决方案。
不是解决方案:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt #Used in the comparison below
im = Image.open('file.png').convert('RGB') #Opens a picture in grayscale
pic = np.array(im)
im.close()
好好工作?我想知道质量是否会发生不可接受的变化。当我显示图像时,我注意到一些差异(即plt.imshow()顶部的黑色行):
im.show() #Before closing
plt.imshow(pic)
但我不知道它们是否只是转换为np.array的不可避免的后果。
PS - 如果它很重要,我会提到我准备用于颜色量化(KMeans)和Floyd抖动的图像。
PPS - 如果您建议我如何不发布重复的问题但直接讨论答案 - 我们将非常感激。
试试看吧!
from PIL import Image
import numpy as np
# Other answer method
im1 = Image.open('gray.png').convert('L')
im1 = np.stack((im1,)*3, axis=-1)
# Your method
im2 = Image.open('gray.png').convert('RGB')
im2 = np.array(im2)
# Test if identical
print(np.array_equal(im1,im2))
样本输出
True
我会说一个不同的方面是,即使输入图像是彩色的,其他答案中的方法也可以工作(实际上它实际上是一个灰度图像,其中R = G = B),而你的方法将产生一个彩色图像。