图片PIL-“ ValueError:波段索引超出范围”

时间:2019-02-18 16:04:24

标签: python python-imaging-library

我正在玩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层。

这是怎么回事?

1 个答案:

答案 0 :(得分:1)

我知道出了什么问题。您共享的图像是带有Alpha通道的灰度图像,因此它有2个带(LA),而不是4个带(RGBA)。

如果希望使用4通道RGBA图像,则应使用以下命令将其转换为该图像:

im = Image.open('input.png').convert('RGBA')