计算机视觉第七课:颜色追踪(只框红色 / 蓝色 / 绿色物体)

电脑会自动识别你指定的颜色,只框出这个颜色的物体。

一、示例代码

python 复制代码
import cv2
import numpy as np

# 1. 读取图片
img = cv2.imread("test.jpg")

# 2. 转 HSV 颜色空间(颜色追踪必须用HSV!)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# ----------------【核心:设置要追踪的颜色范围】----------------
# 我们先追踪 【蓝色】
lower_blue = np.array([90, 100, 100])   # 蓝色最小值
upper_blue = np.array([130, 255, 255])  # 蓝色最大值

# 3. 创建掩膜:只保留蓝色区域,其他全变黑
mask = cv2.inRange(hsv, lower_blue, upper_blue)

# 4. 找出蓝色区域的轮廓
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 5. 只给蓝色物体画框
for cnt in contours:
    area = cv2.contourArea(cnt)
    if area > 200:  # 过滤小噪点
        x, y, w, h = cv2.boundingRect(cnt)
        cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)  # 蓝色框
        cv2.putText(img, "Blue", (x, y-5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255,0,0), 2)

# 显示结果
cv2.imshow("Mask(只看蓝色)", mask)
cv2.imshow("Result", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

二、关键代码和原理解析

1. 为什么要转 HSV?

  • 平时的 BGR 颜色很难按颜色筛选

  • HSV 专门用来按颜色范围筛选,是颜色追踪的标准!

  • OpenCV 中 HSV 三个通道取值固定:

  • H(Hue 色相) :第 1 个值,颜色本身

    • 范围:0 ~ 179
    • 作用:区分红、黄、绿、蓝、紫等基础颜色,是选色的核心。
    • 参考区间(常用):
      • 红色:0~10 170-179
      • 黄色:20~30
      • 绿色:40~80
      • 蓝色:90~130
      • 0 红 → 30 黄 → 60 绿 → 120 蓝 → 150 紫 → 179 回到红
      • 0--10:红 1
      • 10--25:橙
      • 25--35:黄
      • 35--85:绿
      • 85--100:青 / 浅蓝
      • 100--130:蓝
      • 130--170:紫 / 品红(你问的 140--169 在这里)
      • 170--179:红 2(和 0--10 合起来是完整红色)
  • S(Saturation 饱和度) :第 2 个值,颜色鲜艳程度

    • 范围:0 ~ 255
    • 0 = 灰度(黑白灰,无彩色),255 = 颜色最浓郁。
    • 实操:一般设 100~255,过滤掉发白、发灰的杂色 / 反光。
  • V(Value 明度 / 亮度) :第 3 个值,明暗程度

    • 范围:0 ~ 255
    • 0 = 纯黑,255 = 纯白。
    • 实操:一般设 100~255,过滤掉阴影、过暗区域。
python 复制代码
lower_blue = np.array([90, 100, 100])   # 蓝色最小值
upper_blue = np.array([130, 255, 255])  # 蓝色最大值

色相:90-130 蓝色区间

饱和度:100-255 只保留色彩不发灰的像素

亮度:100-255 只保留不算太暗的像素

整体规则:像素的 H、S、V 同时落在 下限,上限 之间,会被保留为白色(目标区域),其余为黑

python 复制代码
mask = cv2.inRange(hsv, lower_blue, upper_blue)

2. 添加文字

python 复制代码
cv2.putText(
    img,        # 画在哪个图上
    "Blue",     # 文字内容
    (x, y-5),   # 文字位置
    cv2.FONT_HERSHEY_SIMPLEX,  # 字体
    0.6,        #字体大小(缩放比例 /fontScale)0.4 → 很小,0.6 → 中等偏小,1.0 → 标准大小,1.5 → 很大,2.0 → 巨大
    (255,0,0),  # 颜色 BGR
    2           # 线条粗细
)

三、效果图

相关推荐
编码小哥1 小时前
OpenCV去噪算法实战:中值滤波与双边滤波应用
人工智能·opencv·计算机视觉
zhangshuang-peta2 小时前
MCP 如何重新定义 Skill:从“能力函数”变成“可治理行为”
人工智能·ai·ai agent·mcp·peta
yubo05092 小时前
计算机视觉第六课:打开摄像头,实时框出物体
人工智能·opencv·计算机视觉
FL16238631292 小时前
窗户干净脏污分类窗户清洁状态分类数据集3299张2类别已划分训练验证测试集
人工智能·分类·数据挖掘
阿里云大数据AI技术2 小时前
基于阿里云 DataWorks Data Agent 进行大模型热度分析
人工智能·agent·nvidia
碳基硅坊2 小时前
Qwen3.5-9B在安全生产安全帽检测中的应用
人工智能·安全·安全帽检测·qwen3.5-9b
云烟成雨TD2 小时前
Spring AI Alibaba 1.x 系列【66】Graph 长期记忆
java·人工智能·spring
春日见2 小时前
五分钟入门 强化学习---Q-Learning算法与实现
人工智能·python·深度学习·算法·机器学习·计算机视觉
卡次卡次12 小时前
vibecoding起步之Claude Code的skills是什么,里面有什么文件,以ppt的一个skills举例
人工智能·opencv·powerpoint