opencv—python录制视频、保存视频

使用opencv-python录制视频

直接上源码:

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 30.0, (640,480))

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv2.flip(frame,1)
#        out.write(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))   将视频转换为灰色的源
        out.write(frame)

        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('1'):
            break
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

录制视频

使用摄像头,需要使用cv2.VideoCapture(0)创建VideoCapture对象;
参数0表示打开笔记本的内置摄像头,如果你电脑上有两个摄像头的话,访问第2个摄像头就可以传入1。参数是视频文件路径则打开视频,如cap = cv2.VideoCapture("…/test.avi")。

cap.read() 按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。

此外,通过cap.get(propId)可以获取摄像头的一些属性,比如捕获的分辨率,亮度和对比度等。
propId是从0~18的数字,代表不同的属性。也可以使用cap.set(propId,value)来修改属性值。比如说,我们在while之前添加下面的代码:

# 获取捕获的分辨率
# propId可以直接写数字,也可以用OpenCV的符号表示
width, height = capture.get(3), capture.get(4)
print(width, height)

# 以原分辨率的一倍来捕获
capture.set(cv2.CAP_PROP_FRAME_WIDTH, width * 2)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height * 2)

waitKey()方法本身表示等待键盘输入,

参数是1,表示延时1ms切换到下一帧图像,对于视频而言;

参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;

参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。

调用release()释放摄像头,调用destroyAllWindows()关闭所有图像窗口。

保存视频

保存视频,我们需要创建一个VideoWriter的对象,需要给它传入四个参数:

  • 输出的文件名,如’output.avi’

  • 编码方式FourCC码

  • 帧率FPS

  • 要保存的分辨率大小

FourCC是用来指定视频编码方式的四字节码,如XVID编码可以这样写:cv2.VideoWriter_fourcc(*'XVID')cv2.VideoWriter_fourcc('X','V','I','D')

使用函数cv2.imshow() 显示图像。窗口会自动调整为图像大小。第一个参数是窗口的名字,其次才是我们的图像。你可以创建多个窗口,只要你喜欢,但是必须给他们不同的名字。

destroyAllWindows()关闭所有的HighGUI窗口。

你可能感兴趣的:(python,opencv)