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

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

一、示例代码

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           # 线条粗细
)

三、效果图

相关推荐
Web3_Daisy29 分钟前
从流动性到执行:如何降低 MEV 对 Web3 市场
大数据·人工智能·web3·区块链
日常通勤穿搭34 分钟前
电商 AI 作图用哪个最方便?新手商家 AI 出图工具对比
大数据·人工智能
爱学堂IT分享41 分钟前
DeepSeek+SpringAI实战AI家庭医生应用(10章) 完整版
人工智能
QXWZ_IA1 小时前
千寻位置支持哪些卫星系统?北斗GPS多星座解析
人工智能·科技·智能硬件·rtk
小淮AI1 小时前
一个国际家庭在武汉的择校笔记:两份外籍人员子女学校的课程方案比较
大数据·人工智能
deepdata_cn1 小时前
如何从0到1学习AI向量基础
人工智能·向量
随风丶飘1 小时前
[特殊字符] 告别“update“和“fix bug“——Smart Git Commit LLM 让 AI 帮你写专业的 Git 提交信息
人工智能·git·bug
H0311169852 小时前
择校参考:枫叶教育 vs 大连美国国际学校,外籍子女学校怎么选
人工智能
刘海东刘海东2 小时前
一条新的人工智能道路(刘海东)一、二、三章
人工智能
xyz_CDragon2 小时前
从 RTL 到 GDSII:人与 AI 协作,用开源 EDA 工具链完成 SHA-256 芯片的 SoC 集成与签核全流程(附完整流程+代码)
人工智能·开源·芯片设计·开源 eda·caravel