使用OpenCV进行球跟踪和落点预测

2024-11-11 08:46   重庆  
点击下方卡片,关注“机器视觉与AI深度学习

视觉/图像重磅干货,第一时间送达

    在这个项目中,我使用 Python、OpenCV、Cvzone 和一些数学(特别是多项式回归)开发了一个球跟踪系统。该系统可以跟踪视频中的球,可视化其轨迹,甚至预测它是否会落在特定区域——虚拟“篮筐”。下面,我将分解我是如何构建它的、我遇到的挑战以及我在此过程中实现的一些很酷的功能。
    第 1 步:设置环境
    我使用的关键库是用于图像和视频处理的 OpenCV、用于简化计算机视觉任务的 Cvzone 和用于数学运算的 NumPy。首先,我导入了必要的模块:
import mathimport cv2import cvzonefrom cvzone.ColorModule import ColorFinderimport numpy as np
    初始化:
cv2.VideoCapture() # grabbing frames from the video file `Videos/vid (3).mp4
    第 2 步:检测球
    为了检测球,我使用了 HSV(色相、饱和度、值)颜色检测。这允许我通过设置特定范围的 HSV 值来根据球的颜色跟踪球:
myColorFinder = ColorFinder(False)hsvVals = {'hmin': 8, 'smin': 96, 'vmin': 115, 'hmax': 14, 'smax': 255, 'vmax': 255}
    这些 HSV 值对应于我视频中球的颜色。定义颜色范围后,我从视频中抓取每一帧并对其进行处理以找到球。
    第 3 步:跟踪球
    在检测到球的颜色后,我使用 'cvzone.findContours()' 来定位球在每一帧中的位置。这就是它变得有趣的地方。对于检测到球的每一帧,我将其位置保存在两个列表中:'posListX' 用于 x 坐标,'posListY' 用于 y 坐标。
imgContours, contours = cvzone.findContours(img, mask, minArea=500)if contours: posListX.append(contours[0]['center'][0]) posListY.append(contours[0]['center'][1])
    “findContours”功能可以非常容易地找到球的确切位置,在检测到的球周围画一个绿色圆圈。
    第 4 步:可视化轨迹
    现在我已经有了球在各个帧中的位置,我使用多项式回归来模拟它的轨迹。多项式回归有助于找到二次方程的系数 A、B 和 C,该方程对球在 2D 空间中的运动进行建模:
A, B, C = np.polyfit(posListX, posListY, 2)
    使用这个方程,我可以预测任何给定 x 坐标的 y 坐标,从而在视频中绘制球的预测路径。
    第 5 步:预测结果
    最后的触球是预测球是否会落在特定区域。我使用从多项式回归中得出的二次方程来计算球在未来某个时间点的位置。
a = Ab = Bc = C - 590 # 590 represents the y-value threshold for the "basket" areax = int((-b - math.sqrt(b ** 2 - (4 * a * c))) / (2 * a))prediction = 330 < x < 430 # Basket zone
    如果球的 x 坐标落在 330 到 430 之间(我的“篮筐”范围),那就是一次成功的投篮!如果没有,它就错过了。
    第 6 步:显示结果
    我使用“cvzone.putTextRect()”在屏幕上实时显示预测。如果预测球会落入篮筐,则会出现绿色的“篮筐”消息;否则,会弹出一条红色的 “No Basket” 消息。
if prediction: cvzone.putTextRect(imgContours, "Basket", (50, 150), scale=5, thickness=5, colorR=(0, 200, 0), offset=20)else: cvzone.putTextRect(imgContours, "No Basket", (50, 150), scale=5, thickness=5, colorR=(0, 0, 200), offset=20)

—THE END—

觉得有用,麻烦给个赞和在看 

机器视觉与AI深度学习
专注于机器视觉、AI、深度学习等技术最新资讯、实战内容及应用案例的分享,交流!
 最新文章