【问题标题】:ValueError: too many values to unpack (expected 3) using PILValueError:使用 PIL 解包的值太多(预期为 3)
【发布时间】:2019-03-11 00:58:49
【问题描述】:

我有一个像素大小(1761、460)的图像,我正在尝试使用 Python 使用 PIL 查找 RGB 值。图像中有 56 种不同的颜色。我正在运行以下代码,但我收到一条错误消息: ValueError: too many values to unpack (expected 3)

有没有人知道更好的方法来查找图像的 RGB 值?

  import numpy as np
  import matplotlib.pyplot as plt
  import colorsys
  from PIL import Image

  img_file=Image.open("orange 4.png")
  img = img_file.load()
  [xs, ys] = img_file.size
   for x in range(0, xs):
           for y in range(0, ys):
            [r, g, b] = img[x, y]
              r /= 255.0
              g /= 255.0
              b /= 255.0

【问题讨论】:

  • 您确定图像是 RGB 模式图像吗?它可以被索引。
  • @kindall 检查是否为RGB模式图片?
  • @kindall 索引图像通常只有 1 个通道,即索引。如果错误说它有太多的值需要解压并且它期望 3,那么最有可能的猜测是有 4 个通道,即 RGBA。
  • 哎呀,是的,当然。我读得太快了,认为没有足够的价值,而不是太多。不过补救方法是一样的:先转换成 RGB。
  • 即使在转换为 RGB 格式后,我也会遇到同样的错误。 @kindall

标签: python image image-processing python-imaging-library rgb


【解决方案1】:

并非所有的 PNG 文件都是一样的。

PNG中指定像素信息的方式有很多种,this document展示了8种基本类型。根据文件的类型,每个像素可能有 1、2、3 或 4 个与每个像素关联的值。

我猜您要打开的文件是带有 Alpha 通道的 RGB。您可以使用将像素信息发送到列表并对其进行迭代,例如:

pixel = img[x, y]
r, g, b = pixel[0], pixel[1], pixel[2]

您可以尝试确定您正在处理的 PNG 类型,或者您可以使用以下方法将图像转换为 RGB:

img_file = img_file.convert('RGB')

【讨论】:

  • 我在使用此转换后尝试过,但仍然遇到相同的错误。 @Nicholas Abril
猜你喜欢
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 2017-12-14
  • 2020-02-24
相关资源
最近更新 更多