如何只提取图像中被遮罩的像素?(Python numpy数组操作)

e0bqpujr  于 2022-11-28  发布在  Python
关注(0)|答案(2)|浏览(176)

我有一个图像和它对应的cob掩码作为numpy数组:

图像numpy阵列具有形状(332,107,3)。
遮罩为布尔型(由True/False组成),并具有二进制(332,107)的形状。

[[False False False ... False False False]
 [False False False ... False False False]
 [False False False ... False False False]
 ...
 [False False False ... False False False]
 [False False False ... False False False]
 [False False False ... False False False]]

如何获得玉米棒子的彩色像素(遮罩所在的彩色图像中的所有像素)?

sz81bmfz

sz81bmfz1#

多亏了M.Setchell的有益评论,我才能自己找到答案。
基本上,我必须将掩模阵列(2D)的维度扩展到图像的相同维度(具有3个颜色通道的3D)。

y=np.expand_dims(mask,axis=2)
newmask=np.concatenate((y,y,y),axis=2)

然后,我必须简单地将新的遮罩与图像相乘,以获得彩色遮罩:

cob= img * newmask

这里只是为了形象化的结果:

envsm3lx

envsm3lx2#

如果要得到一个像素数组,即形状为(n,3)的数组:

#assuming mask.shape = (h,w) , and mask.dtype = bool
pixels = img[[mask]]

如果你想在你的答案中产生图像,那么简单地这样做:

cop = img.copy()
cop[mask] = 0

相关问题