排球机器人视觉:使用OpenCV预测球的轨迹 - 代码示例和详解
以下是使用OpenCV进行排球轨迹预测的代码示例:\n\npython\nimport cv2\nimport numpy as np\n\n# 定义球的颜色范围\nlower_color = np.array([0, 100, 100])\nupper_color = np.array([10, 255, 255])\n\n# 创建VideoCapture对象\ncap = cv2.VideoCapture(0)\n\n# 设置视频帧的宽度和高度\ncap.set(3, 640)\ncap.set(4, 480)\n\n# 创建一个空列表来存储球的轨迹点\npoints = []\n\nwhile True:\n # 读取视频帧\n ret, frame = cap.read()\n \n # 将帧从BGR颜色空间转换为HSV颜色空间\n hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)\n \n # 根据球的颜色范围创建掩膜\n mask = cv2.inRange(hsv, lower_color, upper_color)\n \n # 对掩膜进行形态学操作以去除噪声\n mask = cv2.erode(mask, None, iterations=2)\n mask = cv2.dilate(mask, None, iterations=2)\n \n # 查找轮廓\n contours, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)\n \n if len(contours) > 0:\n # 找到最大的轮廓\n contour = max(contours, key=cv2.contourArea)\n \n # 计算轮廓的最小外接圆\n ((x, y), radius) = cv2.minEnclosingCircle(contour)\n \n # 只有当检测到的球半径大于一定阈值时,才将其视为有效球\n if radius > 10:\n # 画出球的轨迹点\n cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2)\n cv2.circle(frame, (int(x), int(y)), 5, (0, 255, 255), -1)\n \n # 将球的位置添加到轨迹点列表中\n points.append((int(x), int(y)))\n \n # 显示视频帧\n cv2.imshow('Frame', frame)\n \n # 按下'q'键退出循环\n if cv2.waitKey(1) & 0xFF == ord('q'):\n break\n\n# 释放VideoCapture对象和关闭所有窗口\ncap.release()\ncv2.destroyAllWindows()\n\n\n在上述代码中,我们首先定义了球的颜色范围,然后创建了一个VideoCapture对象来读取视频帧。然后,我们循环读取每一帧,并将其从BGR颜色空间转换为HSV颜色空间。接下来,我们根据球的颜色范围创建一个掩膜,并对掩膜进行形态学操作以去除噪声。然后,我们查找轮廓,并找到最大的轮廓。如果检测到的球的半径大于一定阈值,我们将其视为有效球,并将其位置添加到轨迹点列表中。最后,我们在视频帧上绘制球的轨迹点,并显示视频帧。按下'q'键即可退出循环。
原文地址: https://www.cveoy.top/t/topic/pSFe 著作权归作者所有。请勿转载和采集!