首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PIL图像库后图像颜色发生更改

使用PIL图像库后图像颜色发生更改
EN

Stack Overflow用户
提问于 2019-11-19 18:07:52
回答 1查看 81关注 0票数 0

作为其中一项任务的一部分,我正在使用以下代码从亚马逊网络服务S3下载一个图像并将其存储在本地临时文件夹中:

代码语言:javascript
运行
复制
def capturing_image(img):
    res_img = []
    try:
       res_img = Image.open(BytesIO(img))
       res_img.verify()
       print("Valid Image")
       res_img = Image.open(BytesIO(img))
       b, g, r = res_img.split()
       res_img = Image.merge('RGB', (r, g, b))
       res_img = np.array(res_img)
    except Exception as ext:
       print("Invalid Image with Error: ",ext)
    return res_img

S3ActualImage_file = getS3ActualImage(image_path)
actual_image = capturing_image(S3ActualImage_file.content)

问题是它正在改变图像的颜色。下面是我的实际镜像和下载镜像:

实际图像:

捕获图像后

如何保持图像的原始颜色?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-19 18:15:19

您错误地交换了RGB - BGR通道的顺序。

事实上,您可以注意到,在您的图像中,所有的红色都变成了蓝色。根据经验,每次你的输出看起来很奇怪,因为你期望的是红色的东西变成了蓝色的,或者反之亦然,你很容易就搞乱了通道的顺序。

之所以会发生这种情况,是因为在拆分时假设图像处于BGR中,但随后却以相反的顺序堆叠。

代码语言:javascript
运行
复制
b, g, r = res_img.split()
res_img = Image.merge('RGB', (r, g, b))

以相同的顺序合并应该可以解决这个问题。

代码语言:javascript
运行
复制
b, g, r = res_img.split()
res_img = Image.merge('RGB', (b, g, r))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58931403

复制
相关文章

相似问题

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