一、视频读写
cap = cv2.VideoCapture(filepath)
filepath: 可以是摄像头,也可以是文件路径
1、读取视频
import numpy as np
import cv2
cap = cv2.VideoCapture(0) # 1. 实例化VideoCapture对象, 0表示本机第一个摄像头
while cap.isOpened(): # 2. 判断视频是否读取成功
ret, frame = cap.read() # 3. 捕获帧,ret成功返回TRUE,frame每一帧图像
# 4. 获取成功显示图像
if ret == True:
# imshow第一个参数为窗口的名称,第二个参数为显示的图像对象
cv2.imshow("frame", frame)
# 5.每一帧间隔为25ms
if cv2.waitKey(25) & 0xFF == ord('q'):
break
# 6. 释放摄像头,关闭窗口
cap.release()
cv2.destroyAllWindows()
2、播放视频文件
import numpy as np
import cv2
cap = cv2.VideoCapture(r"D:\software\youku\country.mp4") # 打开视频文件
while cap.isOpened():
ret, frame = cap.read() # 读取帧
cv2.imshow("frame", frame) # 显示
c = cv2.waitKey(25)
if c == 27: # ESC键
break
cap.release() # 释放视频设备
cv2.destroyAllWindows()
3、视频属性
3.1 获取视频属性
retval = cap.get(propId)
参数:
propId: 从0到18的数字,每个数字表示视频的属性
常用属性有:
3.2 修改视频属性
cap.set(propId,value)
参数:
proid: 属性的索引,与上面的表格相对应
value: 修改后的属性值
读取视频返回值介绍:ret, frame = cap.read()
参数
ret: 若获取成功返回True,获取失败,返回False
frame: 获取到的某一帧的图像
4、在视频中画图
4.1 画矩形
cv2.rectangle(img, (xmin, ymin), (xmax,ymax), (0,255,0), 1)
cv2.rectangle(frame, (350, 0), (500, 250), (0, 255, 0), 3)
参数
窗口
左上角顶点和右下角顶点的坐标
画框颜色: RGB颜色
画线的粗细:不设置,有默认值1
4.2 画圆
cv2.circle (img,(380,0),63,(255,0,0),3)
圆心与半径,显示颜色以及粗细
线的粗细:-1:填充圆内部,其他值为粗细
示例:
# 画出空心圆
cv2.circle(frame, (380, 0), 63, (0, 0, 255), 1)
# 填充内部
cv2.circle(frame, (380, 0), 63, (0, 0, 255), -1)
4.3 文字
cv2.putText(img, 'python', (100,100), font, 4, (255,255,255),2,cv2.LINE_AA)
在图片上添加文字,需要设置,文字内容,绘制的位置,字体类型、大小、颜色、粗细、类型
cv2.putText(frame, 'python', (100, 100), cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 255, 255), 2, cv2.LINE_AA)
5、保存视频
5.1 流程
- 读取视频
- 创建保存视频的对象,设置编码格式,帧率,图像的宽高等
- 获取读取视频中的每一帧图像
- 将每一帧图像写入到输出文件中
- 资源释放
1. 创建视频写入的对象
out = cv2.VideoWriter(filename,fourcc, fps, frameSize)
参数:
filename:视频保存的位置
fourcc:指定视频编解码器的4字节代码
fps:帧率
frameSize:帧大小
其中设置视频的编解码器,如下所示
retval = cv2.VideoWriter_fourcc( c1, c2, c3, c4 )
参数:
c1,c2,c3,c4: 是视频编解码器的4字节代码,在 fourcc.org中找到可用代码列表,与平台紧密相关,
常用的有:
在Windows中:DIVX(输出为.avi)
在OS中:MJPG(.mp4),DIVX(.avi),X264(.mkv)。
5.2 示例
# 视频保存
import cv2 as cv
import numpy as np
# 1. 读取视频
cap = cv.VideoCapture(0)
# 这里打开摄像头录制了一段自己的视频
# 2. 获取图像的属性(宽和高,),并将其转换为整数
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
# 3. 创建保存视频的对象,设置编码格式,帧率,图像的宽高等
out = cv.VideoWriter('outpy.avi',cv.VideoWriter_fourcc('M','J','P','G'), 10, (frame_width,frame_height))
while cap.isOpened():
# 4.获取视频中的每一帧图像
ret, frame = cap.read()
if ret == True:
# 5.将每一帧图像写入到输出文件中
out.write(frame)
if cv2.waitKey(25) & 0xFF == ord('q'): # ESC键
break
# 6.释放资源
cap.release()
out.release()
cv.destroyAllWindows()
二、视频追踪