如何替换Numpy数组特定索引位置的多通道值
解决方案
步骤说明
要把图像中指定索引位置的RGB三通道统一替换为对应目标值,只需两步:将单通道目标值扩展为三通道形状,再直接赋值到图像的索引位置。
代码实现
import numpy as np # 读取图像数组(假设已完成读取,形状为(256,256,3)) img = read_image(image).numpy() # 索引数组(示例) idx = np.array([[ 2, 254], [ 2, 255], [ 3, 252], ..., [148, 169], [148, 170], [149, 169]], dtype=int64) # 目标值数组(示例,形状为(11978,)) target_vals = np.array([150, 150, 130, ..., 120, 150, 160]) # 将单通道目标值转换为三通道形状(11978,3),每个位置的RGB值相同 target_rgb = np.stack([target_vals] * 3, axis=1) # 也可以用repeat方式实现:target_rgb = np.repeat(target_vals[:, np.newaxis], 3, axis=1) # 对图像的指定索引位置批量赋值 img[idx[:, 0], idx[:, 1]] = target_rgb
原理
图像数组通过img[idx[:,0], idx[:,1]]索引得到的是形状为(N,3)的子数组(N=11978),将目标值数组转换为相同形状后,就能直接完成批量赋值,每个索引位置的三个通道会被统一设置为对应的目标值。
内容的提问来源于stack exchange,提问作者MCPMH
相关产品推荐
相关产品推荐

