使用 Python OpenCV 从视频帧中提取乒乓球轮廓并标注

本文将使用 Python OpenCV 库,从视频帧中提取乒乓球轮廓并使用矩形框进行标注。

步骤:

  1. 读入视频文件: 使用 cv2.VideoCapture 函数读入视频文件。
  2. 创建背景差分器: 使用 cv2.createBackgroundSubtractorMOG2 函数创建一个背景差分器,用于提取前景。
  3. 进行背景差分: 使用 fgbg.apply(frame) 函数进行背景差分,提取出前景。
  4. 生成遮罩: 使用 cv2.threshold 函数对前景进行阈值处理,生成遮罩。
  5. 提取轮廓: 使用 cv2.findContours 函数提取遮罩中的轮廓。
  6. 找到乒乓球: 遍历轮廓,根据面积大小判断是否为乒乓球。
  7. 标注乒乓球: 使用 cv2.boundingRect 函数获取轮廓的矩形框,并在原视频帧上绘制矩形框。
  8. 显示处理后的视频帧: 使用 cv2.imshow 函数显示处理后的视频帧。

代码示例:

import cv2

# 读入视频文件
cap = cv2.VideoCapture('C:/Users/Jionie/Desktop/乒乓.mp4')

# 创建背景差分器
fgbg = cv2.createBackgroundSubtractorMOG2()

while True:
    # 读取一帧视频
    ret, frame = cap.read()

    if not ret:
        break

    # 进行背景差分,提取出前景
    fgmask = fgbg.apply(frame)

    # 根据前景生成遮罩
    thresh = cv2.threshold(fgmask, 128, 255, cv2.THRESH_BINARY)[1]

    # 提取轮廓
    contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 遍历轮廓,找到符合条件的乒乓球
    for contour in contours:
        area = cv2.contourArea(contour)
        if area > 1000:
            # 用矩形框标出乒乓球
            x,y,w,h = cv2.boundingRect(contour)
            cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)

    # 显示处理后的视频帧
    cv2.imshow('frame', frame)

    # 按q键退出程序
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

运行结果:

运行代码后,会打开一个窗口,显示处理后的视频帧。程序会自动提取出乒乓球的轮廓,并用矩形框标出乒乓球。按q键退出程序。

说明:

  • 代码中的 1000 是一个阈值,用于过滤掉面积过小的轮廓,避免误判。
  • (0,255,0) 是矩形框的颜色,表示绿色。
  • 2 是矩形框的线宽。

总结:

本文介绍了使用 Python OpenCV 从视频帧中提取乒乓球轮廓并进行标注的方法,并提供了完整的代码示例。希望本文对你有所帮助。

Python OpenCV 乒乓球识别与跟踪:从视频帧提取轮廓并标注

原文地址: https://www.cveoy.top/t/topic/nK7b 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录