【问题标题】:Convert a RGBA numpy array into binary 2d numpy array将 RGBA numpy 数组转换为二进制 2d numpy 数组
【发布时间】:2016-11-16 17:33:39
【问题描述】:

我已使用枕头将图像加载为 numpy 数组,生成的 numpy 数组的尺寸为 (184, 184, 4),即它是一个 184x184 像素的图像,每个像素都具有 RGBA 尺寸。

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

我是 numpy 新手,尤其是图像处理新手,想知道是否有更快的方法来做这件事。

我尝试了循环检查每个像素的幼稚实现,这似乎太昂贵了。

【问题讨论】:

    标签: python image numpy pillow rgba


    【解决方案1】:

    如果我理解正确,您有一个形状为 (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,image==0 转换为 (184,184,4) 布尔数组
    • 在这种情况下,我们使用 image[:,:,:3] 从等式中排除第 4 个数字
    • np.all 询问是否所有元素都等于 0。
    • axis 参数改变了它查看的轴,记住 python 从 0 开始计数,所以第三个轴是数字 2。

    【讨论】:

    • 如果我想要 0 或 1 而不是 True 或 false,该怎么办。
    • isBlack = np.int16((np.all(image==0,axis=2)))
    • 另外我希望最终尺寸等于 [0,0,0,]
    • 虽然我不知道你为什么要那样做。 True / False 对于屏蔽其他数组很有用
    • 最后一个像素值的原因是图像的透明度,我根本不在乎。如果您能提供一个简单的掩码示例,我会很高兴。
    猜你喜欢
    • 2021-12-29
    • 2013-06-30
    • 2020-02-04
    • 2012-06-08
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多