【问题标题】:Image color is changed after using PIL Image library使用 PIL 图像库后图像颜色发生变化
【发布时间】:2020-03-14 19:36:03
【问题描述】:

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

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)

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

实际图片:

拍摄后

我怎样才能保持图像的原始颜色?

【问题讨论】:

  • 图片是否按BGR顺序排列?为什么要将频道拆分为b, g, r = res_img.split()

标签: python-3.x amazon-s3 python-imaging-library


【解决方案1】:

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

确实,您可以注意到,在您的图像中,所有红色都变成了蓝色。根据经验,每当您的输出看起来很奇怪,因为您希望红色变成蓝色或反之亦然,您很容易弄乱了通道顺序。

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

b, g, r = res_img.split()
res_img = Image.merge('RGB', (r, g, b))

按相同顺序合并应该可以解决问题。

b, g, r = res_img.split()
res_img = Image.merge('RGB', (b, g, r))

【讨论】:

    猜你喜欢
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2021-01-25
    • 2011-06-07
    相关资源
    最近更新 更多