两个numpy格式图像掩膜叠加时仅保留0、1、2像素值的实现方法
Numpy图像掩膜合并解决方案
你之前用位或运算得到四类像素的原因是:像素值2的二进制为10,像素值1的二进制为01,二者位或运算结果为11即十进制的3,因此会出现预期外的像素值。
符合你规则的实现方式有两种,都可以保证输出仅包含0、1、2三类像素:
- 方案1:布尔索引赋值,逻辑清晰易读
import numpy as np # 以img2为基准初始化,保证img2为0的区域输出为0、为1的区域默认输出为1 image3 = img2.copy() # 覆盖所有img1中值为2的位置,保证2的最高优先级 image3[img1 == 2] = 2
- 方案2:np.where单行实现,运算效率更高
image3 = np.where(img1 == 2, 2, img2)
上述两种方案都完全匹配你提出的合并规则:
- img2为0的位置,输出统一为0
- img2为1且img1不为2的位置,输出为1
- 所有img1为2的位置,无论img2的值是什么,输出统一为2
内容的提问来源于stack exchange,提问作者saalim k
相关产品推荐
相关产品推荐

