使用 Python 和 OpenCV 从乒乓球视频中提取橙黄色圆形

本代码使用 Python 和 OpenCV 库,通过颜色掩膜技术从乒乓球视频中提取橙黄色圆形乒乓球,并将其单独显示。

代码:

import cv2

# 读入视频
cap = cv2.VideoCapture('C:/Users/Jionie/Desktop/dazuo/pp.mp4')

# 设置颜色范围
lower_color = (0, 100, 180)
upper_color = (20, 255, 255)

while True:
    # 读取一帧
    ret, frame = cap.read()
    if not ret:
        break

    # 将图像转换为HSV格式
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # 根据颜色范围创建掩膜
    mask = cv2.inRange(hsv, lower_color, upper_color)

    # 膨胀掩膜以填充空洞
    mask = cv2.dilate(mask, None, iterations=2)

    # 查找轮廓
    contours, hierarchy = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 提取最大的轮廓
    if len(contours) > 0:
        c = max(contours, key=cv2.contourArea)

        # 计算轮廓的最小外接圆
        ((x, y), radius) = cv2.minEnclosingCircle(c)

        # 绘制圆形
        cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2)

        # 提取乒乓球图像
        ball = frame[int(y-radius):int(y+radius), int(x-radius):int(x+radius)]

        # 显示图像
        cv2.imshow('frame', frame)
        cv2.imshow('ball', ball)

    # 按下q键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

代码解释:

  1. 读取视频: 使用 cv2.VideoCapture() 函数打开视频文件。
  2. 设置颜色范围: 定义橙黄色乒乓球的颜色范围,使用 HSV 颜色空间。lower_colorupper_color 分别代表颜色范围的下限和上限。
  3. 循环遍历视频帧: 使用 while 循环读取每帧视频。
  4. 转换为 HSV 格式: 使用 cv2.cvtColor() 将 BGR 格式的视频帧转换为 HSV 格式。
  5. 创建掩膜: 使用 cv2.inRange() 函数根据颜色范围创建掩膜,将符合颜色范围的像素设置为白色,其他像素设置为黑色。
  6. 膨胀掩膜: 使用 cv2.dilate() 函数膨胀掩膜,填充空洞,使掩膜更完整。
  7. 查找轮廓: 使用 cv2.findContours() 函数查找掩膜中的轮廓。
  8. 提取最大轮廓: 找到最大的轮廓,假设它对应乒乓球。
  9. 计算最小外接圆: 使用 cv2.minEnclosingCircle() 函数计算轮廓的最小外接圆。
  10. 绘制圆形: 使用 cv2.circle() 函数在视频帧上绘制圆形,以突出显示乒乓球的位置。
  11. 提取乒乓球图像: 使用切片操作从视频帧中提取乒乓球区域的图像。
  12. 显示图像: 使用 cv2.imshow() 函数显示视频帧和乒乓球图像。

运行代码:

  1. 确保你已经安装了 OpenCV 库。
  2. 将视频文件 pp.mp4 放置在 C:/Users/Jionie/Desktop/dazuo 目录下。
  3. 运行代码,观看视频和提取的乒乓球图像。

注意:

  • 代码中的颜色范围 lower_colorupper_color 是根据乒乓球的颜色进行设置的。如果你的视频中的乒乓球颜色有所不同,需要调整这些值。
  • 如果你使用的是其他版本的 OpenCV,可能需要根据版本修改代码中的函数名或参数。
  • 如果你需要提取多个乒乓球,需要修改代码以处理多个轮廓。
  • 代码中的 cv2.waitKey(1) 函数控制视频播放速度,你可以根据需要修改参数。
  • cv2.destroyAllWindows() 函数用于关闭所有窗口,确保释放所有资源。
Python OpenCV 乒乓球视频提取 - 使用掩膜技术提取橙黄色圆形

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

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