将 RGBA numpy 数组转换为二进制二维 numpy 数组
Convert a RGBA numpy array into binary 2d numpy array
我已经使用 pillow 将图像加载为 numpy 数组,生成的 numpy 数组的尺寸为 (184, 184, 4),即它是一个 184x184 像素的图像,每个像素都具有 RGBA 尺寸。
出于所有实际目的,我的应用程序只需要知道像素是否为黑色,因此我只需要一个包含 0、1 的 184x184 np 数组。
我是 numpy 的新手,尤其是图像处理,想知道是否有更快的方法。
我尝试了在一个循环中检查每个像素的简单实现,这似乎太昂贵了。
如果我没理解错的话,你有一个形状为 (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 有点神奇。这就是我们喜欢它的原因。在这种情况下:
- 图像==0根据每个数字是否等于0转换为(184,184,4)布尔数组
- 在这种情况下,我们使用图像[:,:,:3] 从等式
中排除第 4 个数字
- np.all询问是否所有元素都等于0
- axis 参数改变了它查看的轴,记住 python 从 0 开始计数,所以第三个轴是数字 2。
我已经使用 pillow 将图像加载为 numpy 数组,生成的 numpy 数组的尺寸为 (184, 184, 4),即它是一个 184x184 像素的图像,每个像素都具有 RGBA 尺寸。
出于所有实际目的,我的应用程序只需要知道像素是否为黑色,因此我只需要一个包含 0、1 的 184x184 np 数组。
我是 numpy 的新手,尤其是图像处理,想知道是否有更快的方法。
我尝试了在一个循环中检查每个像素的简单实现,这似乎太昂贵了。
如果我没理解错的话,你有一个形状为 (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 有点神奇。这就是我们喜欢它的原因。在这种情况下:
- 图像==0根据每个数字是否等于0转换为(184,184,4)布尔数组
- 在这种情况下,我们使用图像[:,:,:3] 从等式 中排除第 4 个数字
- np.all询问是否所有元素都等于0
- axis 参数改变了它查看的轴,记住 python 从 0 开始计数,所以第三个轴是数字 2。