我注意到显示RGB遮罩的图像无法正常工作,即显示时所得的图像未被遮罩。正常吗,有解决方法吗?
下面的示例显示了观察到的行为:
import numpy as np
from matplotlib import pyplot as plt
img=np.random.normal(0,10,(20,20)) # create a random image
mask=img>0
ma_img=np.ma.masked_where(mask, img) # create a masked image
img_rgb=np.random.uniform(0,1,(20,20,3)) # create a randomRGB image
mask_rgb=np.broadcast_to(mask[...,np.newaxis],img_rgb.shape) # extend the mask so that it matches the RGB image shape
ma_img_rgb=np.ma.masked_where(mask_rgb, img_rgb) # create a masked RGB image
## Display:
fig, ax=plt.subplots(2,2)
ax[0,0].imshow(img)
ax[0,0].set_title('Image')
ax[0,1].imshow(ma_img)
ax[0,1].set_title('Masked Image')
ax[1,0].imshow(img_rgb)
ax[1,0].set_title('RGB Image')
ax[1,1].imshow(ma_img_rgb)
ax[1,1].set_title('Masked RGB Image')
有趣的是,当鼠标经过被遮盖的RBG图像中被遮盖的像素时,像素值不会出现在图形窗口的右下角。
答案 0 :(得分:1)
似乎RGB阵列忽略了该蒙版,另请参见this question。
在doc中,imshow()
的输入可以是:
- (M,N):具有标量数据的图像。使用规范化和颜色图将值映射到颜色。参见参数norm,cmap,vmin,vmax。
- (M,N,3):具有RGB值(0-1浮点或0-255整数)的图像。
- (M,N,4):具有RGBA值(0-1浮点或0-255整数)的图像,即包括透明度。
因此,一种选择是将~mask
用作rgb数组的alpha
值:
img_rgb = np.random.uniform(0, 1, (20, 20, 3))
ma_img_rgb = np.concatenate([img_rgb, ~mask[:, :, np.newaxis]], axis=-1)
# ma_img_rgb = np.dstack([img_rgb, ~mask]) # Jan Kuiken