我正在玩this notebook中的代码。
当我加载自己的前景时,对于另存为“ .png”的某些图像,我会收到此错误:
ValueError跟踪(最近一次通话最后一次)
<ipython-input-63-1464e7681a29> in <module>()
21 foreground_path = random.choice(foregrounds)
22 background_path = random.choice(backgrounds)
---> 23 composite, mask, bbox = compose_images(foreground_path, background_path)
24
25 composite_path = os.path.join(output_dir, 'image_{0:04d}.png'.format(i))
<ipython-input-47-53344b89732e> in compose_images(foreground_path, background_path)
4 assert os.path.splitext(foreground_path)[1].lower() == '.png', 'foreground must be a .png file'
5 foreground = Image.open(foreground_path)
----> 6 foreground_alpha = np.array(foreground.getchannel(3))
7 assert np.any(foreground_alpha == 0), 'foreground needs to have some transparency: {}'.format(foreground_path)
8
~/anaconda3/envs/ctlearn/lib/python3.6/site-packages/PIL/Image.py in getchannel(self, channel)
2082 'The image has no channel "{}"'.format(channel))
2083
-> 2084 return self._new(self.im.getband(channel))
2085
2086 def tell(self):
ValueError: band index out of range
因此,罪魁祸首代码是np.array(foreground.getchannel(3))
,我相信它应该能够获取目标图像的alpha通道。
这使我相信所讨论的图像缺少Alpha通道。但实际上,所涉及的图像确实具有Alpha层。
这是怎么回事?
答案 0 :(得分:1)
我知道出了什么问题。您共享的图像是带有Alpha通道的灰度图像,因此它有2个带(LA),而不是4个带(RGBA)。
如果希望使用4通道RGBA图像,则应使用以下命令将其转换为该图像:
im = Image.open('input.png').convert('RGBA')