Python如何将二值图的白色像素替换为对应RGB图像的像素值
Python实现二值图白色位置替换为RGB图对应像素的方案
以下提供两种常用图像处理库的实现方式,默认二值图白色取值为255、黑色取值为0,可根据实际情况调整阈值。
方法1:基于OpenCV实现
先安装依赖:pip install opencv-python numpy
实现代码:
import cv2 import numpy as np # 读取图像:二值图按灰度模式读取,RGB图按彩色模式读取 binary_img = cv2.imread("你的二值图路径.png", cv2.IMREAD_GRAYSCALE) rgb_img = cv2.imread("你的RGB图路径.png", cv2.IMREAD_COLOR) # 校验两张图尺寸匹配 assert binary_img.shape[:2] == rgb_img.shape[:2], "两张图像尺寸不一致,无法处理" # 生成白色像素掩码:二值图中值为255的位置标记为True white_mask = binary_img == 255 # 初始化结果图:先把单通道二值图转三通道,保证颜色维度一致 result = cv2.cvtColor(binary_img, cv2.COLOR_GRAY2BGR) # 替换掩码位置的像素为RGB图对应值 result[white_mask] = rgb_img[white_mask] # 保存输出结果 cv2.imwrite("输出结果路径.png", result)
说明:OpenCV默认读取彩色图为BGR顺序,如果需要RGB顺序输出,可在读取RGB图后新增一行rgb_img = cv2.cvtColor(rgb_img, cv2.COLOR_BGR2RGB)调整
方法2:基于Pillow实现
先安装依赖:pip install pillow numpy
实现代码:
from PIL import Image import numpy as np # 读取图像:二值图转灰度模式,RGB图转彩色模式 binary_img = Image.open("你的二值图路径.png").convert("L") rgb_img = Image.open("你的RGB图路径.png").convert("RGB") # 校验两张图尺寸匹配 assert binary_img.size == rgb_img.size, "两张图像尺寸不一致,无法处理" # 转为numpy数组处理 binary_arr = np.array(binary_img) rgb_arr = np.array(rgb_img) # 生成白色像素掩码 white_mask = binary_arr == 255 # 初始化结果数组:把单通道二值图堆叠为三通道 result_arr = np.stack([binary_arr]*3, axis=-1) # 替换掩码位置的像素为RGB图对应值 result_arr[white_mask] = rgb_arr[white_mask] # 转回Image对象保存 result_img = Image.fromarray(result_arr) result_img.save("输出结果路径.png")
注意事项
- 如果你的二值图白色取值不是255(比如部分标注工具生成的二值图白色值为1),把代码中
== 255的判断条件改为对应白色取值即可 - 两种方法均为像素级向量化操作,处理效率高,适合大尺寸图像场景
内容的提问来源于stack exchange,提问作者user16571762
相关产品推荐
相关产品推荐

