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

如何用OpenCV提取灰色区域并填充其与蓝色(显橙色)区域的交集?

提取灰色区域并修复相交处蓝色区域

核心思路

通过掩码运算定位灰色区域、蓝色区域及二者的相交部分,再从原图提取蓝色像素填充相交区域,最终保留完整灰色区域的同时修复相交处的蓝色显示。

完整实现代码

import cv2 as cv
import numpy as np

# 读取目标BGR图像
img = cv.imread("your_image_path.jpg")

# 1. 生成灰色区域掩码
lower_gray = np.array([90, 90, 90])
upper_gray = np.array([95, 95, 95])
gray_mask = cv.inRange(img, lower_gray, upper_gray)

# 2. 生成蓝色(显示为橙色)区域掩码(HSV空间)
lower_hsv = np.array([10, 10, 200])
upper_hsv = np.array([100, 255, 255])
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
blue_mask = cv.inRange(hsv, lower_hsv, upper_hsv)

# 3. 计算灰色与蓝色区域的相交掩码
intersection_mask = cv.bitwise_and(gray_mask, blue_mask)

# 4. 从原图提取蓝色区域的原始像素
blue_pixels = cv.bitwise_and(img, img, mask=blue_mask)

# 5. 构建最终结果图像
result = img.copy()
# 仅保留灰色区域,非灰色区域置为黑色
result[gray_mask == 0] = 0
# 在相交区域填充原始蓝色像素
result[intersection_mask > 0] = blue_pixels[intersection_mask > 0]

# 查看结果
cv.imshow("gray_mask", gray_mask)
cv.imshow("blue_mask", blue_mask)
cv.imshow("intersection_mask", intersection_mask)
cv.imshow("final_result", result)
cv.waitKey(0)
cv.destroyAllWindows()

关键步骤说明

  • 相交掩码生成:cv.bitwise_and(gray_mask, blue_mask) 精准定位同时属于灰色和蓝色区域的像素,这就是需要修复的位置
  • 蓝色像素提取:通过cv.bitwise_and从原图中提取蓝色区域的原始像素,确保填充的是图像原本的蓝色色调,而非手动指定的纯色
  • 图像合成:先保留灰色区域,再将相交区域替换为原始蓝色像素,完美匹配需求效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:21:02