如何用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
相关产品推荐
相关产品推荐

