如何从HSV图像的Value通道中筛选红色区域并将其余部分设为白色
解决方案
实现需求的核心逻辑:红色像素的判定必须依赖Hue、Saturation两个通道的阈值,Value通道仅作为最终修改的目标对象,单通道掩码和单通道Value通道维度完全匹配,你遇到的维度报错是赋值逻辑错误导致的,可按以下步骤修改:
- 沿用原有逻辑基于完整HSV图像生成红色区域掩码
- 拆分出独立的V通道,仅将非红色区域的V值设置为255(Value通道最大值对应白色)
- 如需输出最终可视化图像,将修改后的通道合并后转回BGR色彩空间即可
完整可运行代码
import cv2 import numpy as np # 读入原始BGR图像 img = cv2.imread('zg4515ah.png') # 转换为HSV色彩空间 img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 生成红色区域掩码,判定逻辑沿用原有阈值即可 lower_red = np.array([155,25,0]) upper_red = np.array([179,255,255]) mask = cv2.inRange(img_hsv, lower_red, upper_red) # 拆分HSV三个独立通道 h, s, v = cv2.split(img_hsv) # 仅修改V通道:非红色区域设为255(白色),红色区域保留原有V值 v[mask == 0] = 255 # ------------ 可选操作:生成最终可视化图像 ------------ # 合并修改后的通道 img_hsv_modified = cv2.merge((h, s, v)) # 转回BGR格式用于显示或保存 img_result = cv2.cvtColor(img_hsv_modified, cv2.COLOR_HSV2BGR) # 显示/保存结果 cv2.imshow('result', img_result) cv2.waitKey(0) cv2.destroyAllWindows() # cv2.imwrite('result.png', img_result) # ------------ 可选操作:单独输出处理后的V通道图像 ------------ # cv2.imshow('modified_v_channel', v) # cv2.waitKey(0)
内容的提问来源于stack exchange,提问作者Michael Kročka
相关产品推荐
相关产品推荐

