写一段python代码运用mask处理技术用opencv 读入给定的乒乓mp4文件地址为CUsersJionieDesktopdazuoppmp4 编写代码分析每帧视频从视频画面中提取出一个乒乓球橙黄色圆形的遮罩然后再提取出乒乓球橙黄色圆形要求提取出的画面为以乒乓球橙黄色圆形为主体的图像投屏在一个黑色背景的视频中视频不能被快放
以下是参考代码:
import cv2 import numpy as np
读入视频
cap = cv2.VideoCapture("C:/Users/Jionie/Desktop/dazuo/pp.mp4")
定义橙黄色的HSV颜色范围
lower_orange = np.array([11, 43, 46]) upper_orange = np.array([25, 255, 255])
定义输出视频的宽度和高度
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
定义输出视频的帧率和编码方式
fps = cap.get(cv2.CAP_PROP_FPS) fourcc = cv2.VideoWriter_fourcc(*'mp4v')
创建输出视频对象
out = cv2.VideoWriter("C:/Users/Jionie/Desktop/dazuo/pp_output.mp4", fourcc, fps, (width, height))
while True: # 读取一帧视频 ret, frame = cap.read() if not ret: break
# 将当前帧转换为HSV颜色空间
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 使用inRange函数获取橙黄色的遮罩
mask = cv2.inRange(hsv, lower_orange, upper_orange)
# 使用HoughCircles函数检测圆形轮廓
circles = cv2.HoughCircles(mask, cv2.HOUGH_GRADIENT, dp=1, minDist=50, param1=100, param2=30, minRadius=10, maxRadius=50)
# 如果检测到圆形轮廓,则将圆形轮廓绘制在原始图像上,并将其投屏在黑色背景的视频中
if circles is not None:
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
x, y, r = i
cv2.circle(frame, (x, y), r, (0, 255, 0), 2)
mask = np.zeros((height, width), dtype=np.uint8)
cv2.circle(mask, (x, y), r, 255, -1)
output = np.zeros(frame.shape, dtype=np.uint8)
output[mask>0] = frame[mask>0]
out.write(output)
# 显示当前帧的画面
cv2.imshow("frame", frame)
if cv2.waitKey(1) == ord("q"):
break
释放资源
cap.release() out.release() cv2.destroyAllWindows(
原文地址: http://www.cveoy.top/t/topic/dQk6 著作权归作者所有。请勿转载和采集!