You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在视频中显示圆形坐标与边框,解决台球识别错误及多余检测问题

代码存在的问题及修复方案

1. 检测到矩形框外圆形的问题

你仅在帧上绘制了台球桌矩形框,未对检测范围做限制,cv2.HoughCircles默认对整帧图像做检测,自然会识别到框外的圆形。
修复逻辑:遍历检测到的圆形时,增加坐标范围判断,仅保留圆心在矩形(250,100)到(1250,600)范围内的结果:

for cx,cy,radius in circles[0,:]:
    # 增加范围判断
    if 250 < cx < 1250 and 100 < cy < 600:
        cv2.circle(frame,(cx,cy),int(radius),(0,255,255),2)
        # 后续显示逻辑也放在这个判断里

2. 坐标显示异常问题

你调用cv2.putText时传入的是str(circles),circles是所有检测结果的数组,每个元素自带x、y、半径三个值,所以会显示一长串数值。需要仅输出当前遍历到的圆心坐标即可:

# 把原来的str(circles)换成当前圆的坐标
cv2.putText(frame,f"x:{cx}, y:{cy}",(cx,cy),cv2.FONT_HERSHEY_SIMPLEX,0.75,(255,0,0),2,cv2.LINE_AA)

3. 台球识别不准确问题

  • 你直接将原帧转灰度后做检测,没有过滤桌面外的干扰内容:可以先将BGR帧转HSV色彩空间,提取台球桌绿色区域的掩码,仅在掩码区域做圆检测,大幅降低误检率。
  • 霍夫圆参数可优化:param2设为40阈值偏低,误检多可以适当调高到45-55区间;minRadius和maxRadius可以根据你视频里台球的实际大小缩小范围,比如如果实际半径是10-30像素,就把区间改成minRadius=10, maxRadius=30,避免把其他大小的圆形识别成台球。
  • 现有代码存在崩溃风险:cv2.HoughCircles未检测到圆形时会返回None,你直接调用np.around(circles)会报错,需要先加非空判断:
circles = cv2.HoughCircles(frame, cv2.HOUGH_GRADIENT,1,50,
                      param1= 150, param2= 40, minRadius= 1, maxRadius= 100)
if circles is not None: # 增加非空判断
    circle = np.uint16(np.around(circles))
    # 后续遍历逻辑放在这个判断里
  • 你将原彩色帧转灰度后直接覆盖了原变量,后续绘制都在灰度图上进行,不利于调试,可以单独用一个灰度变量存处理后的检测用图,保留原彩色帧做绘制。

mp4上传问题

Stack Exchange平台不支持直接上传视频文件,你可以将视频上传到公开云存储服务后,把访问链接附在提问内容中即可。


内容的提问来源于stack exchange,提问作者jaun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:45:03