当前位置: 首页 > article >正文

opencv基础学习

2.3跟踪物体颜色:红色为例

代码如下:

import cv2
import numpy as np

# 指定摄像头索引,0通常是默认摄像头
cap = cv2.VideoCapture(0)

while (True):
    ret, frame = cap.read()
    if not ret:
        print("Failed to grab frame")
        break

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # 设定红色范围,这里是一个例子,可能需要根据实际情况调整
    lower_red = np.array([0, 50, 50])  # 考虑到红色的不同变种,这里从0开始
    upper_red = np.array([10, 255, 255])
    # 如果需要包含更广泛的红色,可以扩展范围
    # lower_red = np.array([0, 120, 70])
    # upper_red = np.array([10, 255, 255])

    mask1 = cv2.inRange(hsv, lower_red, upper_red)
    res=cv2.bitwise_and(frame,frame,mask=mask1)
    cv2.imshow("res",res)
    cv2.imshow("mask", mask1)
    cv2.imshow("frame", frame)

    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

解析:

  • cv2.VideoCapture(0):打开摄像头设备,返回一个可以读取视频帧的对象。
  • cap.read():从视频捕获对象中读取一帧,返回 ret(成功标志)和 frame(图像帧)。
  • cv2.COLOR_BGR2HSV:将图像从 BGR 颜色空间转换为 HSV 颜色空间,HSV 更方便进行颜色检测,因为它将颜色的色调(H)、饱和度(S)和明度(V)分离。
  • cv2.inRange(hsv, lower_red, upper_red):在 HSV 图像中,根据 lower_red 和 upper_red 范围创建一个二值化的遮罩,在范围内的像素为白色,不在范围内的为黑色。
  • cv2.bitwise_and(frame, frame, mask=mask1):使用 mask1 遮罩对 frame 进行按位与操作,只保留 mask1 中白色部分对应的 frame 区域,其他部分置为黑色,从而实现对特定颜色的提取。
  • cv2.imshow:显示图像,第一个参数是窗口名称,第二个参数是要显示的图像。
  • cv2.waitKey(5):等待 5 毫秒,用于显示图像和检测键盘输入。
  • cap.release():释放摄像头资源,防止资源泄露。

http://www.kler.cn/a/507438.html

相关文章:

  • 1.17组会汇报
  • HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (二、首页轮播图懒加载的实现)
  • 目标检测新视野 | YOLO、SSD与Faster R-CNN三大目标检测模型深度对比分析
  • 掌握C语言内存布局:数据存储的智慧之旅
  • 数字人助力企业出海增长,魔珐科技亮相2025晋江跨境电商峰会
  • AWS云计算概览(自用留存)
  • 画流程图 代码生成流程图 流程图自动运行
  • JavaScript系列(31)--装饰器详解
  • uc/os-II 原理及应用(八) 系统裁减以及移植到51单片机-下
  • Redis登录优化
  • YUV转RGB
  • Python编程与机器学习:解锁气象、海洋、水文领域的新实践
  • 从 0 开始实现一个 SpringBoot + Vue 项目
  • windows远程桌面连接限定ip
  • HTTP 性能优化策略
  • 【设计模式】 单例模式(单例模式哪几种实现,如何保证线程安全,反射破坏单例模式)
  • 关于ubuntu命令行连接github失败解决办法
  • 小哆啦的跳跃挑战:能否突破迷宫的极限?
  • 【北京迅为】iTOP-4412全能版使用手册-第七部分 Android入门教程
  • 【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件
  • el-dialog弹窗的@open方法中,第一次引用ref发现undefined问题,第二次后面又正常了
  • 微服务容器化部署好处多吗?
  • 记录一个v-if与自定义指令的BUG
  • 使用 ChatGPT 生成和改进你的论文
  • 【Javascript Day10】Math对象、Math随机数、时间对象
  • LabVIEW实车四轮轮速信号再现系统