将RGBA numpy数组转换为二进制2d numpy数组

时间:2016-11-16 17:33:40

标签: python image numpy pillow rgba

我已经使用枕头将图像加载为numpy数组,并且所得到的numpy数组的尺寸为(184,184,4),即它是184x184像素图像,每个像素具有RGBA尺寸。

出于所有实际目的,我的应用程序只需知道像素是否为黑色,因此我只需要一个184x184 np数组,其中包含0,1。

我是numpy的新手,特别是图像操作,想知道是否有更快的方法来做到这一点。

我尝试了在循环中检查每个像素的天真实现,这看起来太昂贵了。

1 个答案:

答案 0 :(得分:4)

如果我理解正确,你有一个形状(184,184,4)的数组,你想得到一个形状为(184,184)的布尔数组,具体取决于最终尺寸是否等于[0,0,0,0]

image = np.random.randint(0, 255, size=(184, 184, 4)) #Generate random image
isBlack = np.int64(np.all(image[:, :, :3] == 0, axis=2))

完成!

但它是如何运作的?好像很神奇! Numpy有点神奇。这就是我们喜欢它的原因。在这种情况下:

  • image == 0转换为(184,184,4)布尔数组,具体取决于每个数字是否等于0
  • 在这种情况下,我们使用图像[:,:,:3]从等式
  • 中排除第4个数字
  • np.all询问所有元素是否等于0.
  • axis参数更改它所查看的轴,记住python从0开始计数,因此第三个轴是数字2。