Numpy:将黑色像素转换为白色的最快,最麻木的方法

时间:2019-10-17 05:38:43

标签: python numpy

我有RGB彩色图像遮罩mask_color,形状为(4,4,3)。如何在不使用任何循环,没有其他程序包的情况下(最好是numpy的方式)将所有黑色像素[0,0,0]迅速转换为白色[255,255,255]

mask_color = np.array([
 [
  [0,0,0],
  [128,0,255],
  [0,0,0],
  [0,0,0]
 ],
 [
  [0,0,0],
  [0,0,0],
  [0,0,0],
  [0,0,0]
 ],
 [
  [0,0,0],
  [50,128,0],
  [0,0,0],
  [0,0,0]
 ],
 [
  [0,0,0],
  [0,0,0],
  [245,108,60],
  [0,0,0]
 ]
])

plt.imshow(mask_color)
plt.show()

image with black background

white_bg_mask_color = # do something
plt.imshow(white_bg_mask_color)
plt.show()

image with white background

2 个答案:

答案 0 :(得分:1)

您可以使用np.where:

>>> np.where(mask_color.any(-1,keepdims=True),mask_color,255)
array([[[255, 255, 255],
        [128,   0, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [ 50, 128,   0],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [245, 108,  60],
        [255, 255, 255]]])

答案 1 :(得分:0)

您还可以使用如下所示的布尔索引进行操作

mask_color[np.all(mask_color==0, axis=2)] = 255
mask_color