参考资料:蔚蓝呆鸟
在我学习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()
运行结果: