Python OpenCV 乒乓球识别与跟踪:从视频帧提取轮廓并标注
使用 Python OpenCV 从视频帧中提取乒乓球轮廓并标注
本文将使用 Python OpenCV 库,从视频帧中提取乒乓球轮廓并使用矩形框进行标注。
步骤:
- 读入视频文件: 使用
cv2.VideoCapture函数读入视频文件。 - 创建背景差分器: 使用
cv2.createBackgroundSubtractorMOG2函数创建一个背景差分器,用于提取前景。 - 进行背景差分: 使用
fgbg.apply(frame)函数进行背景差分,提取出前景。 - 生成遮罩: 使用
cv2.threshold函数对前景进行阈值处理,生成遮罩。 - 提取轮廓: 使用
cv2.findContours函数提取遮罩中的轮廓。 - 找到乒乓球: 遍历轮廓,根据面积大小判断是否为乒乓球。
- 标注乒乓球: 使用
cv2.boundingRect函数获取轮廓的矩形框,并在原视频帧上绘制矩形框。 - 显示处理后的视频帧: 使用
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 从视频帧中提取乒乓球轮廓并进行标注的方法,并提供了完整的代码示例。希望本文对你有所帮助。
原文地址: https://www.cveoy.top/t/topic/nK7b 著作权归作者所有。请勿转载和采集!