机器学习报错解决2——ValueError: too many values to unpack (expected 3)

Posted 康康好老啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习报错解决2——ValueError: too many values to unpack (expected 3)相关的知识,希望对你有一定的参考价值。

参考资料:蔚蓝呆鸟

在我学习Pytorch的PIL模块的过程中,运行了如下代码:

from PIL import Image
a = Image.open('Avengers.jpeg')
ra, ga, ba = a.split() # 把图像分割为R,G,B三个通道图像
ra.save("R.jpg")
ga.save("G.jpg")
ba.save("B.jpg")

大致意思是将一张RGB图片分成R、G、B三个通道,并分别将每个通道的图片保存下来。

但是出现了如下的报错:

ValueError: too many values to unpack (expected 3)

翻译一下就是用来接收的变量数与函数需要接收的变量数不一致。

我查找了好久的博客,终于找到一篇博客问题描述与我的相符(就是参考资料后面给的链接)

问题在于,'Avengers.jpeg’这张图片的通道不一定只有三个!

于是我在第二行之后加一行代码:

print(a.mode, a.size, a.format)

输出结果为:

RGBA (600, 299) PNG

这里输出的是RGBA而不是RGB!RGBA模式有四种颜色通道,所以应该由四个变量去接收。

修改后的代码如下:

from PIL import Image
a = Image.open('Avengers.jpeg')
print(a.mode, a.size, a.format)
ra, ga, ba, aa = a.split()  # 把图像分割为R,G,B三个通道图像
ra.save("R.jpg")
ga.save("G.jpg")
ba.save("B.jpg")
aa.save("A.jpg")

运行结果:该目录的文件夹内新增加了四张图片,但是除了‘A.jpg’是白色图片以外,另外三张图片都是灰色(我猜是灰度图,保存的时候只保存了一个数字值,然后系统默认为只有一个通道的灰度图)

我目前没有找到解决办法,于是调用pylab模块

from PIL import Image
from pylab import subplot, imshow, show
a = Image.open('Avengers.jpeg')
ra, ga, ba, aa = a.split()  # 把图像分割为R,G,B三个通道图像
subplot(221)
imshow(ra)
subplot(222)
imshow(ga)
subplot(223)
imshow(ba)
subplot(224)
imshow(aa)
show()

运行结果:

以上是关于机器学习报错解决2——ValueError: too many values to unpack (expected 3)的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow读取jpg格式图片报错 ValueError: Only know how to handle extensions: ['png']; with Pillow i

使用numpy.loadtxt()总是报错ValueError: could not convert string to float: 213

ValueError: too many values to unpack

解决ValueError: You need to pass a valid `token` or login by using `huggingface……问题

解决ValueError: You need to pass a valid `token` or login by using `huggingface……问题

ValueError: too many values to unpack tensorflow