一,打开摄像头实时视频
import cv2
capture = cv2.VideoCapture(0)
while(True):
# 获取一帧
ret, frame = capture.read()
#显示帧
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
cv2.VideoCapture(x)
目的是指定视频源,如果获取的帧来自本地的视频文件,则x为视频文件的路径,如果视频源来自摄像头,则参数x:0指的是摄像头的编号。如果你电脑上有两个摄像头的话,访问第2个摄像头就可以传入1。
而waitKey(x)的参数x是一个大于0的数,x越小视频播放越流畅,x越大,视频越卡。
当检测到键盘按钮q被按下时,则结束程序。
capture.read()返回2个数据,ret是一个布尔值,表示是否正确获取帧,而frame则是返回的视频帧。
二,播放本地视频文件
import cv2
# 播放本地视频
capture = cv2.VideoCapture('1.avi') #视频源为目录下的“1.avi”文件
while(capture.isOpened()):
ret, frame = capture.read()
if ret:
cv2.imshow('frame', frame)
if cv2.waitKey(30) == ord('q'):
break
capture.isOpened():由于视频源是文件的视频文件,所以就有播放结束的时候,capture.isOpened()是个布尔值,当为True时,视频还未播放结束,当为False时,表示视频已经播放结束。
三,录制/保存视频
import cv2
capture = cv2.VideoCapture(0)
# 定义编码方式并创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc('M','J','P','G') #确定视频编码格式为 MJPG
outfile = cv2.VideoWriter('output.avi', fourcc, 25, (640, 480))
while(capture.isOpened()):
ret, frame = capture.read()
if ret:
outfile.write(frame) # 写入文件
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
else:
break
cv2.VideoWriter()创建视频写入对象,用来录制/保存视频
VideoWriter(....)
需要给它传入四个参数:
- 输出的文件名,如'output.avi'
- 编码方式FourCC码
- 帧率FPS,决定录取后的视频播放速度,FPS越大,播放速度越快
- 要保存的分辨率大小