如何使用numpy将不在允许值列表中的RGB图像像素设为白色
我有一张RGB像素格式的图像,还有一个像素列表meaningful_pixels: List[Tuple(int, int, int)],存储了我认定为有效信息的像素值,我需要将所有不在该列表中的像素统一设置为白色(255, 255, 255)。
原始图像如下:
我期望的处理效果如下:
现在我已经成功生成了“允许像素”列表,对应左上角矩形的“紫到黄”渐变色彩,存储在meaningful_pixels变量中,形状为(num_of_pixels, 3)。
之前我可以通过创建mask的方式移除黑色矩形,对应代码如下:
# 实际运行代码 mask = np.all(image == [0, 0, 0], axis=-1) image[mask] = [255, 255, 255]
但我不知道当允许值是一个列表而非单个值时,该如何生成对应mask。之前我用for循环实现过该功能,但性能非常差,现在需要用numpy的向量化方法实现最高效的处理,达到类似如下伪代码的效果:
# 伪代码 image = np.remove_value_if_not_in_list(image, allowed_pixels)
解决方案
# 生成“允许像素”的mask mask = np.all(np.isin(img, allowed_pixels) == [True, True, True], axis=-1) # 对mask取反,将非允许像素替换为白色 img[~mask] = [255, 255, 255]
内容的提问来源于stack exchange,提问作者wirher
相关产品推荐
相关产品推荐

