首页 > 解决方案 > ValueError:使用 PIL 解包的值太多(预期为 3)

问题描述

我有一个像素大小(1761、460)的图像,我正在尝试使用 PIL 使用 Python 查找 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

标签: pythonimageimage-processingpython-imaging-libraryrgb

解决方案


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

在 PNG 中指定像素信息的方法有很多种,本文档展示了 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')

推荐阅读