使用opencv中的VideoWriter函数,保存电脑内置摄像头捕获到的视频(文中包括flip函数参数翻转设置)

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()
上一篇:企业运维----Zabbix TIDB替换mysql数据库


下一篇:深度学习14 数据扩充效果查看