灰度.png到numpy数组

问题描述 投票:1回答:1

实际上,这个问题已被多次回答。但是,由于声誉“太低”,我不允许对答案添加评论,我想讨论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 - 如果您建议我如何不发布重复的问题但直接讨论答案 - 我们将非常感激。

python-3.x numpy png grayscale image-conversion
1个回答
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),而你的方法将产生一个彩色图像。

© www.soinside.com 2019 - 2024. All rights reserved.