如何按指定条件叠加两个同形状的numpy数组(图像)?
用Numpy实现图像数组叠加的方案
核心逻辑:先识别arrayA中的黑色像素位置,将这些位置的像素值替换为arrayB的对应值,其余位置保留arrayA的原值。
步骤1:生成黑色像素掩码
RGB格式中黑色像素的三个通道值均为0,通过以下代码标记arrayA中黑色像素的位置:
import numpy as np # 假设arrayA、arrayB为已加载的同shape numpy数组 black_mask = (arrayA == [0, 0, 0]).all(axis=2)
axis=2表示沿RGB通道维度做判断,确保三个通道同时为0才判定为黑色像素。
步骤2:生成目标数组arrayC
先复制arrayA作为基础,再将掩码标记的黑色位置替换为arrayB的对应像素:
arrayC = arrayA.copy() arrayC[black_mask] = arrayB[black_mask]
这种基于numpy向量化操作的方式,比逐像素循环高效得多。
示例验证代码
如果需要快速测试逻辑,可手动构造测试数组:
# 构造2x2的测试数组 arrayA = np.array([ [[255, 0, 0], [0, 0, 255]], # 红色、蓝色 [[0, 0, 0], [255, 0, 0]] # 黑色、红色 ]) arrayB = np.array([ [[0, 255, 0], [255, 255, 0]], # 绿色、黄色 [[0, 255, 0], [255, 255, 0]] # 绿色、黄色 ]) # 执行替换逻辑 black_mask = (arrayA == [0, 0, 0]).all(axis=2) arrayC = arrayA.copy() arrayC[black_mask] = arrayB[black_mask] print(arrayC)
运行后可见,arrayA中的黑色像素被替换为arrayB的绿色,红、蓝像素保持不变。
内容的提问来源于stack exchange,提问作者vuict
相关产品推荐
相关产品推荐

