首页 > 解决方案 > 用另一幅图像的 RGB 像素替换一幅图像中对应的白色像素

问题描述

我有 2 个图像 - 其中一个图像是二值化的,即每个像素是黑色或白色,另一个图像是标准 RGB 图像。两张图片大小相同。对于第一张图像中的所有白色像素,我想获取 RGB 图像中的相应像素并将它们附加到白色像素的位置。我怎样才能在 Python 中做到这一点?

标签: python

解决方案


使用二值化图像作为像素坐标的二值索引:

import numpy as np

my_source_image = np.random.randint(0, 255, (480,640,3), np.uint8) # defined somewhere, assumed to have shape [H,W,3]
my_binarized_image = np.random.randint(0, 2, (480,640), np.uint8) # defined somewhere, assumed to have shape [H,W]
pixel_idx = my_binarized_image.astype(bool)
my_dest_image = np.zeros_like(my_source_image)
my_dest_image[pixel_idx,:] = my_source_image[pixel_idx]

请注意,我将目标图像定义为全零(如果您想要不同的背景颜色,只需初始化为颜色值),然后填写相关像素,而不是my_binarized_image像您在问题中看到的那样重复使用,因为目标图像需要三个通道,而二值化图像只有一个。

或者,只要“背景”颜色为黑色,您就可以避免预分配第二张图像,而只需将第一张图像中的像素归零:

my_dest_image = my_source_image * pixel_idx[...,None]

[...,None]在末尾添加了一个额外的维度pixel_idx以使逐像素乘法成为可能)


推荐阅读