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

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

一、示例代码

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

三、效果图

相关推荐
非优秀程序员12 小时前
第12章 烧钱无底洞!!!不烧就死,烧了也不知道啥时候死|《互联网产品恩仇录》
人工智能
Zelman94513 小时前
第06章-交互与观察动作空间
人工智能
冬奇Lab13 小时前
开源项目第258期:Harness² —— Google Research 的「递归式 Agent Harness 优化」,模型权重不动,只改 Agent 的外壳
人工智能·开源
字节跳动视频云技术团队14 小时前
每两家头部手机厂商就有一家选它:火山引擎如何成为 AI 手机助手的“隐形底座”?
人工智能
泯泷15 小时前
像项目经理一样指挥 AI 团队:管理者模式
人工智能·llm·agent
京东云开发者15 小时前
双11囤Token火了:京东搜索量暴涨7倍,AI生产力成新刚需
人工智能
ahccqw15 小时前
OpenCV 车辆数量统计
人工智能·opencv·计算机视觉
人工智能AI技术15 小时前
LangGraph 本地 build 频频翻车,最终在服务器跑通流式对话
人工智能
Flynn Liang16 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope