加粗样式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
使用 cv2.VideoCapture() 来获取视频,在括号中写入视频读取路径。获取视频的逐帧进行的。
cap = cv2.VideoCapture('video1.mp4')
cap
cap 返回值如下:
<VideoCapture 000001B6734E1310>
亦可由摄像头输入视频,默认摄像头为0,亦可选择其他摄像头
cap = cv2.VideoCapture(0)
...
cap.release()
在使用 cv2.VideoCapture() 时习惯性在最后使用 cap.release() 释放视频。
cap.read() 返回值为 retval 和 image,分别是一个布尔值和读取的一帧图片。可以用 shape 查看返回值
ret, frame = cap.read()
print(ret,frame.shape)
返回值为一个布尔值和数组每个维度的值。显示 True 表示这一帧被成功获取,1920和1080是视频每一帧图片的高和宽,3是图片的三原色。
True (1920, 1080, 3)
可使用 cap.get(3) 和 cap.get(4) 验证一下视频宽度和高度:
cap.get(3)
1080.0
这些值可以使用 cap.set(propId,value) 来修改:
一般在使用 cap.read() 时,为避免获取未开始而出现错误,可以使用 cap.isOpened() 检查,实现只有在cap已经开始的情况下读取。
while cap.isOpened():
ret,frame = cap.read()
...
一个播放视频的完整过程
import numpy as np
import cv2
cap = cv2.VideoCapture('video1.mp4')
while(cap.isOpened()):
ret, frame = cap.read()
cv2.imshow('frame',frame)
# 按下 q 退出播放
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
这里播放时也可将视频转换为任意模式,如改变去除颜色或RGB,再进行播放
gray = cv2.cvtColor(frame,code = cv2.COLOR_BGR2GRAY)
cv2.imshow('gray_frame',gray)
RGB_mode = cv2.cvtColor(frame,code = cv2.COLOR_BGR2RGB)
cv2.imshow('RGB_frame',RGB_mode)
保存视频可以使用 cv2.imwrite() 方法
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
cv2.VideoWriter_fourcc('M','J','P','G')
#设置输出文件的名称格式,指定FourCC编码,帧数,尺寸
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
#参数为0时竖直方向翻转图片,-1时水平竖直均翻转,1时水平翻转
frame = cv2.flip(frame,1)
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()