网站 验证码 错误,合肥专业做网站,如何网站做淘客,为企业做一件小事废话不多说直接上代码#xff01;#xff01;
# 这是一个示例 Python 脚本。
import cv2
import numpy as npdef track_object():# 打开摄像头外接cap cv2.VideoCapture(0)while True:# 读取摄像头帧# ret#xff08;Return Value#xff09;是一个布尔值#xff0c;表示…废话不多说直接上代码
# 这是一个示例 Python 脚本。
import cv2
import numpy as npdef track_object():# 打开摄像头外接cap cv2.VideoCapture(0)while True:# 读取摄像头帧# retReturn 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, iterations2) # 对掩膜进行腐蚀处理以去除噪声 。iterations为次数mask cv2.dilate(mask, None, iterations2) #膨胀处理# 寻找物体的轮廓#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 Noneif len(contours) 0: #说明检测到轮廓# 找到面积最大的轮廓的点集从轮廓列表中计算出面积最大的轮廓的点集。contourArea是计算轮廓面积的函数。#max的第一个参数可以为一个列表。第二个参数固定为 key功能函数。#作用从列表中遍历成员实现功能函数。max_contour max(contours, keycv2.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