将2D numpy掩码应用于灰度图像

3

我有一个256×256像素的2D掩模,其中像素值为0或255,并且有一个匹配的灰度图像。两者都具有形状(256, 256)。

我想将掩模应用于灰度图像,以使生成的图像仅包含原始灰度图像中对应掩模值为255的像素(应保留原始灰度像素值)。

我无法使用现有工具实现此目标。

img_clean = img_grayscale[mask]

正如在numpy文档中提到的那样,它将一个新的维度添加到数组中。

我该如何解决这个问题?


“only contains pixels from the original grayscale image” 这句话是什么意思? - ikkuh
返回翻译后的文本:生成的图像应该是原始图像的复制品,除了那些在掩码中对应为0的像素 - 对于这些像素,生成的图像值应该为0 - pepe
1
在这种情况下,按位与运算符应该可行:img_clean = img_grayscale&mask - ikkuh
1
是的,完美的,如果您将其作为答案放置,我会选择它,谢谢。 - pepe
好主意,但是如果掩码的值!= 255也可以工作。我不确定这是否可以。 - Solvalou
这是真的,虽然这些掩码是0或255 - 会有更好的方法吗? - pepe
3个回答

6

增加第三个选项并直接修改您的灰度图像:

img_grayscale[mask == 255] = 0

提示:如果您不想进行原地修改,可以创建一个副本。


第三个选项也是最佳选项。 - Jeru Luke

5

最灵活的,因为您可以将屏蔽区域设置为任何0-255值(其中0为)。此外,这显然不是一个原地计算。 - jonincanada

3

可以使用按位与来将像素值设置为0,其中掩码为0

img_clean = img_grayscale & mask

由于掩码包含0255值,因此根据您的要求,值将保持不变或设置为0


只是一个小注释,但如果img_grayscale的数据类型与uint8不同或者img_grayscale的强度范围大于255,那么这将无法工作。在大多数情况下,灰度图像是0-255范围内的uint8,但以防万一值得添加注释(例如,我倾向于使用0-1范围内的float32图像)。 - Imanol Luengo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接