首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PIL Pixel RGBA Python

PIL Pixel RGBA Python
EN

Stack Overflow用户
提问于 2022-01-18 13:57:26
回答 2查看 140关注 0票数 0

我试图获取图像的每个像素的RGBA值,输出似乎有超过2个RGBA值。

代码语言:javascript
运行
复制
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)]

EN

回答 2

Stack Overflow用户

发布于 2022-01-18 14:05:02

因为如果您在本网站或其他任何中检查RGB(254,254,254),则与白色相同。

这就是为什么代码会在黑白颜色边框之间混淆并提供更多输出的原因。

票数 0
EN

Stack Overflow用户

发布于 2022-01-18 14:44:44

JPG图像从来没有透明("alpha")数据:它是一种不透明的图像格式。如果您想要透明的通道信息( "rgba“中的”a“),您必须首先使用以下方法来转换它:

代码语言:javascript
运行
复制
img = Image.open('image1.jpg', 'r').convert('rgba')

然而,尽管你的措辞,这不是困扰你,是的,图像应该只有2种颜色和现在的3种颜色,与“假的”(254,254,254)出现。

同样,这是由于JPEG图像格式:它是一种有损格式,这意味着它不显示每个像素的确切信息(即使设置为100%的质量也不必这样做):因此,黑白边界上的像素将是中间值,因为用于内部数据表示的曲线上下起伏。

如果你可以改变你的源文件,使用"png“文件格式-它有一个很好的压缩,并将保留确切的像素值。(将现有的jpg文件转换为png无法工作:它将复制(254,.)(价值)

否则,在读取图像之后,应用一个阈值过滤器--它将将值修正到两个级别。不幸的是,PIL没有提供现成的、普通的、阈值过滤器--但是对于这个特定的图像,"ModeFilter“就可以了:

代码语言:javascript
运行
复制
from PIL import Image, ImageFilter
img = Image.open('image1.jpg', 'r')
img = img.filter(ImageFilter.ModeFilter(5))
print(set(img.getdata()))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70756768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档