废话不多说直接上代码!! # 这是一个示例 Python 脚本。 import cv2 import numpy as np def track_object(): # 打开摄像头外接 cap = cv2.VideoCapture(0) while True: # 读取摄像头帧 # ret(Return Value)是一个布尔值,表示是否成功读取了一帧图像。如果成功读取,ret为True;否则,为False。 # frame是读取到的图像帧。 ret, frame = cap.read() # 将图像转换为HSV颜色空间。cv2.COLOR_BGR2HSV参数表示将BGR格式转换为HSV格式。 #BGR(蓝绿红)格式的图像帧转换为HSV(色相、饱和度、明度)格式。HSV颜色空间更适合进行颜色相关的图像处理。 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 定义追踪的颜色范围(此处以蓝色物体为例,可根据需要进行微调) #第一个参数:色相(Hue):可以尝试在0到179之间选择一个适当的范围。。 #第二个参数:饱和度(Saturation):通常在较高的范围,例如1到255之间。 #第三个参数:明度(Value):根据具体场景,可以在较高的范围,例如0到255之间。 lower_color = np.array([90, 50, 50]) upper_color = np.array([130, 255, 255]) # 根据颜色范围创建掩膜。 #用于过滤出在指定颜色范围内的部分。这个掩码可以用于后续的图像处理,例如颜色分割或物体识别。 mask = cv2.inRange(hsv, lower_color, upper_color) #开运算(Opening):先进行腐蚀,然后进行膨胀。它有助于去除小的噪点和分离相邻的物体。 #闭运算(Closing):先进行膨胀,然后进行腐蚀。它有助于填充物体中的小孔,连接相邻的物体。 mask = cv2.erode(mask, None, iterations=2) # 对掩膜进行腐蚀处理,以去除噪声 。iterations为次数 mask = cv2.dilate(mask, None, iterations=2) #膨胀处理 # 寻找物体的轮廓 #cv2.findContours函数来找到二值图像中的轮廓。 #参数: #参数1:输 入的二值图像。通常是经过阈值处理后的图像,例如在颜色过滤之后生成的掩码。 #参数2(cv2.RETR_EXTERNAL):轮廓的检索模式。有几种模式可选,常用的包括: # cv2.RETR_EXTERNAL:只检测最外层的轮廓。 # cv2.RETR_LIST:检测所有的轮廓并保存到列表中。 # cv2.RETR_CCOMP:检测所有轮廓并将其组织为两层的层次结构。 # cv2.RETR_TREE:检测所有轮廓并重构整个轮廓层次结构。 # 参数3(cv2.CHAIN_APPROX_SIMPLE):轮廓的近似方法。有两种方法可选,常用的有: # cv2.CHAIN_APPROX_SIMPLE:压缩水平、垂直和对角线方向上的所有轮廓,只保留端点。 # cv2.CHAIN_APPROX_NONE:保留所有的轮廓点。 #返回值: contours:包含检测到的轮廓的列表。每个轮廓由一系列点组成。 # _(下划线):层次信息,通常在后续处理中可能会用到。在这里,我们通常用下划线表示我们不关心这个返回值。 contours, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 初始化物体中心,center是一个包含两个整数的元组,表示轮廓的质心坐标 center = None if len(contours) > 0: #说明检测到轮廓 # 找到面积最大的轮廓的点集,从轮廓列表中,计算出面积最大的轮廓的点集。contourArea是计算轮廓面积的函数。 #max的第一个参数:可以为一个列表。第二个参数:固定为 key=功能函数。 #作用:从列表中遍历成员实现功能函数。 max_contour = max(contours, key=cv2.contourArea) # 计算物体的最小外接圆,参数为:轮廓的点集 #(x, y):外接圆的圆心坐标。 #radius:外接圆的半径。 ((x, y), radius) = cv2.minEnclosingCircle(max_contour) # 计算物体的中心坐标 #M为字典,里面存着 二值图像矩阵信息 M = cv2.moments(max_contour) #m00 = moments['m00'] # 面积 #cx = moments['m10'] / moments['m00'] # 质心的x坐标 #cy = moments['m01'] / moments['m00'] # 质心的y坐标 center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"])) # 只有当物体半径大于一定值时才显示追踪结果 if radius > 10: #外接圆半径大于10 # 在图像上绘制物体的圆形轮廓和中心 # 这一行代码绘制一个以 (x, y) 为圆心,半径为 radius 的圆。颜色为 (0, 255, 255) 表示BGR格式中的黄色,线宽度为2。 cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2) #这一行代码绘制一个半径为5的实心圆作为中心点,以 center 为中心。颜色为 (0, 0, 255) 表示BGR格式中的红色。。 cv2.circle(frame, center, 5, (0, 0, 255), -1) # 显示实时追踪结果 #这行代码使用OpenCV的cv2.imshow函数来显示帧,窗口标题为"Object Tracking"。 cv2.imshow("Object Tracking", frame) # 按下Esc键退出追踪 if cv2.waitKey(1) == 27: break # 释放摄像头并关闭窗口 cap.release() cv2.destroyAllWindows() # 运行物体追踪程序 track_ob
收录于话题
相关信息
你可能还喜欢
热门推荐信息
校验 ChatGPT 4.0 真实性的三个经典问题:快速区分 GPT3.5 与 GPT4,并提供免费测试网站
ByHashTang
现在已经有很多 ChatGPT 的套壳网站,以下分享验明 GPT-4 真身的三个经典问题,帮助你快速区分套壳网站背后到底用的是 GPT-3.5 还是 GPT-4。 大家可以在这个网站测试:https: ...
汽车标定技术(三)--XCP协议如何支持测量功能
ByCyberSecurity_zhang
目录 1. 概述 2. 测量方式 -- Poll 3. 测量方式 -- DAQ 3.1 ODT概念模型 3.2 DAQ List概念 3.3 ODT 绝对编号和相对编号 3.4 静态DAQ和动态DAQ ...
初识Dockerfile
Byqq_58647543
Dockerfile简介 从之前的学习中我们可以了解到:镜像的定制实际上就是定制每一层所添加的配置、文件。那么如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像 ...
ubuntu cutecom串口调试工具使用方法(图形界面)
ByDontla
文章目录 Ubuntu下使用CuteCom进行串口调试使用指南什么是CuteCom?主要特点 安装CuteCom使用APT包管理器从源码编译安装 配置串口CuteCom界面解析(启动cutecom)使 ...
uniapp小程序九宫格抽奖
By前端小凯
定义好奖品下标,计时器开始抽奖,请求接口,出现中奖奖品之后,获取中奖商品对应的奖品下标,再次计时器判断当前移动的小标是否为中奖商品的下标,并且是否转到3圈(防止转1圈就停止),如果时就清除两次计时器。 ...