如何使用PIL等库交换图像中的蓝色与黄色颜色值?
仅交换图像中黄色与蓝色的实现方案
可以用你已导入的PIL和numpy实现这个需求,核心思路是通过像素掩码识别黄色、蓝色区域,再交换对应颜色值。具体实现如下:
代码示例
# 打开目标图像(替换为你的图像路径) img = Image.open("your_image.jpg").convert("RGB") # 转成numpy数组方便像素级操作 img_np = np.array(img) # 定义黄、蓝色的RGB识别阈值(可根据图像实际颜色调整) # 黄色:红、绿通道值偏高,蓝通道值偏低 yellow_mask = (img_np[..., 0] > 200) & (img_np[..., 1] > 200) & (img_np[..., 2] < 50) # 蓝色:蓝通道值偏高,红、绿通道值偏低 blue_mask = (img_np[..., 2] > 200) & (img_np[..., 0] < 50) & (img_np[..., 1] < 50) # 先备份两类像素的颜色值,避免替换时覆盖丢失 yellow_pixels = img_np[yellow_mask].copy() blue_pixels = img_np[blue_mask].copy() # 交换颜色 img_np[yellow_mask] = blue_pixels img_np[blue_mask] = yellow_pixels # 转回PIL图像并显示 result_img = Image.fromarray(img_np) plt.figure() plt.imshow(result_img) plt.axis('off') plt.show()
关键说明
- 阈值可灵活调整:如果图像中的黄/蓝色不是纯色调,可修改代码中的数值(如200、50)来匹配实际像素的RGB范围。
- 通道顺序注意:PIL转numpy数组后,通道顺序为
(高度, 宽度, RGB),对应索引0=红、1=绿、2=蓝。 - 必须先拷贝像素值:直接替换会导致原颜色被覆盖无法恢复,所以要先备份两类像素的颜色数据。
内容的提问来源于stack exchange,提问作者Python_newbie
相关产品推荐
相关产品推荐

