首页 > 解决方案 > 如何查找对象是否已通过 OpenCv 中的帧之间的某个区域

问题描述

请你看看下面的图片篮球检测 我正在使用固定相机跟踪一个球(A),我有它的坐标。我还设法使用相同的相机通过物体检测来检测篮球框,然后我计算了 2 个区域:1 个在篮框上方(B),另一个在篮框下方(C)。我希望能够判断球是否在帧之间的这两个区域(B 和 C)之间通过,这样我就可以检测到投篮。我知道我应该使用 IF 语句来决定这一点,但是我如何捕捉某物(球)在一帧中的位置以及它在另一帧中的位置?如果你不太明白我的问题,请你看看我试图重现的这个实现:https ://www.linkedin.com/pulse/basketball-goal-detection-rnn-stephan-janssen/

编辑:我设法使用以下方法获得球的中心坐标:

c = max(cnts, key=cv2.contourArea)
((x, y), radius) = cv2.minEnclosingCircle(c)
M = cv2.moments(c)
xa = int(M["m10"] / M["m00"])
ya = int(M["m01"] / M["m00"])
radi = radius

对于 ROI:箍的坐标为:

if object_name == "hoop":
 ymin = int(max(1,(boxes[i][0] * imH)))
 xmin = int(max(1,(boxes[i][1] * imW)))
 ymax = int(min(imH,(boxes[i][2] * imH)))
 xmax = int(min(imW,(boxes[i][3] * imW)))

xmin 和 ymin 是区域左上角的坐标。xmax 和 ymax 是左下角的坐标。

要计算我使用的箍顶部的矩形: cv2.rectangle(frame, (xmin,ymin-60), (xmax,ymax-60), (10, 255, 0), 2)

为了计算底部的那个,我使用了 cv2.rectangle(frame, (xmin,ymin+30), (xmax,ymax+30), (10, 255, 0), 2)

所以,我要问的是:

  1. 我如何使用这些坐标/矩形来知道 xa 和 ya(球的坐标)何时在这些区域内。
  2. 如何在一帧中捕捉球的位置并查看它们在下一帧中的不同之处?

目前,如果有帮助,这就是我用来读取框架的内容?:

video = cv2.VideoCapture(VIDEO_PATHS)
while(video.isOpened()):
    ret, frame = video.read()

标签: pythontensorflowopencvobject-detection

解决方案


推荐阅读