前言
打球的时候,我们常常要用眼睛去识别球的位置,确定球的落点和轨迹。用摄像头和视频捕捉物体的位置,确定中心坐标,绘制轮廓边框,就成为了基于Python的OpenCV(Opencv for Python)要处理的重要问题。
思路
1.获取原视频
cap=cv2.VideoCapture('ballsvideo.mp4')#获取原视频 cv2.namedWindow('processed_video', cv2.WINDOW_NORMAL) #创建一个可调整大小的窗口 cv2.resizeWindow('processed_video', 500, 800)#设置窗口宽度为500,高度为800
2.逐帧读取原视频
while True: ret,frame=cap.read()#读取原视频每帧 if not ret:#直到视频没有下一帧了才结束 break processed_frame=process(frame)#处理每帧 cv2.imshow('processed_video',processed_frame)#逐帧播放新视频 if cv2.waitKey(1) & 0xFF == ord('q'):#按q键退出视频播放 break
3.逐帧处理
把RGB图像转变成HSV图像
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
在利用OpenCV进行颜色识别时,通常会将图像从RGB(红绿蓝)颜色空间转换到HSV(色调、饱和度、亮度)颜色空间。
HSV颜色空间能够更好地分离颜色信息(通过色调Hue),而RGB颜色空间中的颜色信息是分散在三个通道中的。在HSV空间中,色调(H)通道表示颜色,而饱和度(S)和亮度(V)通道表示颜色的强度和亮度,这使得颜色分析和识别更为简单直接。而且HSV颜色空间对光照变化具有较好的稳定性。在RGB空间中,光照变化会影响R、G和B三个通道的值,而在HSV空间中,光照变化主要影响V通道的值,而H通道(颜色)的值相对稳定。
颜色掩码区分颜色
#颜色掩码 #绿色掩码 lower_green, upper_green = numpy.array([35, 50, 50]), numpy.array([85, 255, 255]) green_mask = cv2.inRange(hsv, lower_green, upper_green) #红色掩码 #红色在hsv颜色