的确,这个问题已经回答了很多次。但是,由于“信誉太低”而不允许在评论中添加评论,因此我想讨论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-如果您建议我不要发布重复的问题,而直接讨论答案,将不胜感激。
答案 0 :(得分:1)
尝试一下,看看!
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的灰度图像),而您的方法将产生彩色图像。
答案 1 :(得分:0)
我正在做类似的事情,虽然不确定为什么,但是遇到了很多问题。最后,这对我很有效,而且没有丢失任何数据。
dask-cuda-worker
并转换回去:
from PIL import Image
import numpy as np
img=np.array(Image.open(filename).convert('L'))
编辑:这仅适用于黑白图像。彩色图像需要3D阵列而不是2D阵列