我试图获取图像的每个像素的RGBA值,输出似乎有超过2个RGBA值。
from PIL import Image
img = Image.open('image1.jpg', 'r')
img_data = list(img.getdata())
print(img_data)
图1.jpg:
而不是[(0,0,0) , (255,255,255)]
我得到了[(0,0,0),(255,255,255),(254,254,254)]
发布于 2022-01-18 14:05:02
因为如果您在本网站或其他任何中检查RGB(254,254,254),则与白色相同。
这就是为什么代码会在黑白颜色边框之间混淆并提供更多输出的原因。
发布于 2022-01-18 14:44:44
JPG图像从来没有透明("alpha")数据:它是一种不透明的图像格式。如果您想要透明的通道信息( "rgba“中的”a“),您必须首先使用以下方法来转换它:
img = Image.open('image1.jpg', 'r').convert('rgba')
然而,尽管你的措辞,这不是困扰你,是的,图像应该只有2种颜色和现在的3种颜色,与“假的”(254,254,254)出现。
同样,这是由于JPEG图像格式:它是一种有损格式,这意味着它不显示每个像素的确切信息(即使设置为100%的质量也不必这样做):因此,黑白边界上的像素将是中间值,因为用于内部数据表示的曲线上下起伏。
如果你可以改变你的源文件,使用"png“文件格式-它有一个很好的压缩,并将保留确切的像素值。(将现有的jpg文件转换为png无法工作:它将复制(254,.)(价值)
否则,在读取图像之后,应用一个阈值过滤器--它将将值修正到两个级别。不幸的是,PIL没有提供现成的、普通的、阈值过滤器--但是对于这个特定的图像,"ModeFilter“就可以了:
from PIL import Image, ImageFilter
img = Image.open('image1.jpg', 'r')
img = img.filter(ImageFilter.ModeFilter(5))
print(set(img.getdata()))
https://stackoverflow.com/questions/70756768
复制相似问题