python - 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
解决方案
并非所有的 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')
推荐阅读
- sql - SQL如何对同一列中的两行求和
- python - 如何使用 csv 模块写入特定单元格?
- unix - 使用“一切都是文件”设计原则和 Unix 哲学的其余部分从平面文件创建和查询数据
- node.js - 无法使用发送到服务器的数据
- flutter - 未处理的异常:输入“未来”
' 不是类型 'String' 的子类型 - django - Django:如何编辑旧模型以使 PK 可序列化
- git - Gitlab CI:从推送/合并中获取所有提交更改
- polygon - 检测cesium js中多边形之间的所有实体
- reactjs - 反应,无法正确管理 handleChange
- r - `[<-.data.frame`(`*tmp*`, j, (2 * i) - 1, value = 0.2) 中的错误:新列会在现有列之后留下孔