如何使用OpenCV Python提取图像指定颜色区域并绘制到另一图像
实现方法
你的代码存在两个核心问题:
- 没必要转HSV格式——你要匹配的是精确的RGB值(255,255,0),OpenCV读取图片默认是BGR通道顺序,这个颜色对应的BGR值是(0,255,255),直接在BGR空间做精确匹配更准确。
- 最终合成逻辑错误——原代码只保留了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
相关产品推荐
相关产品推荐

