HSV 颜色掩膜实验台 cv2.inRange + medianBlur

画布里是一张程序生成的红绿灯小场景。拖动 H / S / V 上下限,实时得到 inRange 掩膜(三通道都落在闭区间内才为 255), 可开关 7×7 中值滤波,统计白像素并按实验十(E10)的逻辑判 red / green(红灯优先)。H 用 OpenCV 的 0–179(= 角度 ÷ 2)。

灯态 环境亮度100%
① 原图(BGR)鼠标悬停看像素值
把鼠标移到原图上……
② 掩膜 mask
③ bitwise_and 结果只留掩膜白处

阈值上下限

H 下限 > 上限时按“跨零点”处理:等价于两段 inRange([下限,179] 和 [0,上限])再 bitwise_or。

统计与判决 E10 程序第 10–24 行

取值换算 OpenCV ↔ 常见写法

H 角度 ° ⇄ OpenCV H
S/V 百分比 % ⇄ 0–255
OpenCV 8 位图:H = 角度 ÷ 2(0–179),S、V = 百分比 × 255 / 100(0–255)。纯红 H=0、纯黄 30、纯绿 60、纯蓝 120。红色跨 0° / 360°,所以 OpenCV 里 0 附近和 179 附近都是红。

场景、噪点均由脚本绘制(固定随机种子)。HSV 换算:V = max,S = 255·(max−min)/max,H 按色相角 ÷ 2 取整;中值滤波对二值掩膜等价于“窗口内白像素 ≥ (k²+1)/2 则为 255”,边界按复制边缘处理(同 OpenCV)。