You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用OpenCV Python提取图像指定颜色区域并绘制到另一图像

实现方法

你的代码存在两个核心问题:

  1. 没必要转HSV格式——你要匹配的是精确的RGB值(255,255,0),OpenCV读取图片默认是BGR通道顺序,这个颜色对应的BGR值是(0,255,255),直接在BGR空间做精确匹配更准确。
  2. 最终合成逻辑错误——原代码只保留了image2中mask覆盖的区域,没有把image1的黄色区域叠加进去。

以下是正确的实现代码:

import cv2
import numpy as np

# 读取两张尺寸一致的图片
image1 = cv2.imread('pic1.jpg')
image2 = cv2.imread('pic2.jpg')

# 目标RGB(255,255,0)对应OpenCV的BGR格式为(0,255,255)
target_color = np.array([0, 255, 255])

# 创建精确匹配目标颜色的二值mask:匹配区域为白色,其余为黑色
mask = cv2.inRange(image1, target_color, target_color)

# 从image1中提取黄色区域
yellow_region = cv2.bitwise_and(image1, image1, mask=mask)

# 从image2中提取非黄色区域(用mask的反掩码)
non_yellow_region = cv2.bitwise_and(image2, image2, mask=cv2.bitwise_not(mask))

# 合并两个区域:黄色区域用image1的,其余部分用image2的
final_result = cv2.add(yellow_region, non_yellow_region)

# 保存结果
cv2.imwrite('final.jpg', final_result)

关键步骤说明

  • 精确mask生成:cv2.inRange的上下限设为相同值,会严格匹配所有等于目标BGR的像素,确保只提取你需要的黄色区域。
  • 区域分离与合并:通过mask和反掩码分别提取两张图片的对应区域,再用cv2.add叠加,实现将image1的黄色区域替换到image2对应位置的效果。

内容的提问来源于stack exchange,提问作者Wallace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:25:42