0 引言
上一节讲到了如何调用电脑内置摄像头,那如果我们想捕获摄像头拍到的图像应该怎样操作呢?本文将提出一种解决方法(完整代码附于文末):
1 先将上一节的代码复制一遍
本节程序主要在上一节的代码中进行增添修改
import numpy as np
import cv2 as cv
cap=cv.VideoCapture(0)
if not cap.isOpened():
print('Cannot open camera')
exit()
while True:
ret,frame=cap.read()
if not ret:
print('Cannot receive frame . Exiting...')
break
gray=cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
new_gray=cv.flip(gray, 1)
cv.imshow("frame",new_gray)
if cv.waitKey(1)& 0xFF==ord('q'):
break
cap.release()
cv.destroyAllWindows()
2 在已经捕获到的图像中,设置保存操作
实现这个功能,我们要用到一个函数:cv.VideoWriter(),其功能主要是创建一个对象,来写入视频。该函数由video+writer组成,意为视频+写入,即保存视频;例:
vw=cv.VideoWriter("C:/Users/output.avi",cv.VideoWriter_fourcc('X','V','I','D'),20.0,(640,480) )
该函数中分为四个参数,分别表示:储存路径及文件名称、保存视频的格式、每一帧播放速率、视频窗口画幅。
3 设定视频保存格式
视频格式大家熟知的有:.avi、.mp4等等,他们分别对应的fourcc编码为:MJPG、DIVX。在设置时,将对应的fourcc编码输入到cv.VideoWriter_fourcc()中,即可。例:
cv.VideoWriter_fourcc('X','V','I','D') //设定保存格式为.avi
4 将视频写入保存对象
确定好以上参数后,我们通过摄像头读取到视频信息后,可以逐帧写入前面定义的保存对象:cv.VideoWriter(),也就是cw。需要使用对象下的函数:vw.write()。例:
videowrite.write(frame)
5 释放所有的捕获对象
cap.release()
videowrite.release()
cv.destroyAllWindows()
6 补充:视频内容翻转函数
该函数cv.flip(),可以让相机捕获到的视频沿X、Y、XY轴对称翻转。
frame=cv.flip(frame,1)
主要参数有两个,第一个是翻转的窗口对象,文中是frame;第二个参数为翻转坐标轴的确定:
参数>0时,图像视频沿Y轴对称翻转、
参数=0时,图像视频沿XY两轴各对称翻转一次、
参数<0时,图像视频沿X轴对称翻转。
7 附上保存视频完整程序
import numpy as np
import cv2 as cv
cap=cv.VideoCapture(0)
fourcc=cv.VideoWriter_fourcc(*'XVID')
videowrite=cv.VideoWriter('C:/Users/liao/Desktop/output.avi',fourcc,20.0,(640,480))
while cap.isOpened():
ret,frame=cap.read()
if not ret:
print("Can't receive frame (stream end?). Exiting..." )
break
frame=cv.flip(frame,1)
videowrite.write(frame) #将一帧写入
cv.imshow('frame',frame)
if cv.waitKey(1)==ord('q'):
break
cap.release()
videowrite.release()
cv.destroyAllWindows()