繁体   English   中英

PIL像素RGBA Python

[英]PIL Pixel RGBA Python

我正在尝试获取图像每个像素的 RGBA 值,output 似乎有超过 2 个 RGBA 值。

from PIL import Image

img = Image.open('image1.jpg', 'r')

img_data = list(img.getdata())

print(img_data)

图片1.jpg:

图像1.jpg

而不是[(0,0,0), (255,255,255)]我得到[(0,0,0),(255,255,255),(254,254,254)]

因为如果您在本网站检查 RGB(254,254,254) 或任何其他颜色与白色相同。
这就是为什么代码在黑白边框之间混淆并给出更多 output

JPG 图像从不具有透明度(“alpha”)数据:它是一种不透明的图像格式。 如果您想要透明通道信息(“rgba”中的“a”,则必须先将其转换为:

img = Image.open('image1.jpg', 'r').convert('rgba')

然而,尽管你的措辞,这并不是你的困扰,是的,图像应该只有 2 个 colors 和 3 个 colors,并显示“虚假”(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()))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM