VideoCapture() 虚拟采集器,一般设备号从0开始
cap.read() 读取视频帧
返回值有两个,第一个为状态值,读到帧为true
第二个值为视频帧
cap.release() 释放资源
示例程序:
import cv2  #引入CV库
#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',300,300)  #设置窗口大小
#获取视频设备
cap = cv2.VideoCapture(0)
while True:
    #从摄像头读视频帧
    ret,frame = cap.read()
    #将视频帧在窗口中显示
    cv2.imshow('video',frame)
    key = cv2.waitKey(1)  #不能为0,0为等待中断,只能读取到一帧的数据
    if(key & 0xFF == ord('q')):
        break
#释放资源
cap.release() #释放视频资源
cv2.destroyAllWindows()  #释放窗口资源
运行结果:
读取视频文件
从视频文件中读取视频帧
cap = cv2.VideoCapture("文件地址")   #从文件获取视频只处理视频,不处理音频,所以读取到的视频没有声音
播放速度设置
key = cv2.waitKey(40) 将视频数据录制成多媒体文件
VideoWriter()
write()
1秒多少帧,视频的像素(宽和高)
release() 释放资源,将磁盘中的数据输出
VideoWriter() 参数:
参数1:为输出文件位置
参数2:多媒体文件格式(VideoWriter_fourcc),fourcc所用编码器,Windows系统采用DIVX编码器
参数3:帧率
参数4:分辨率大小,应为摄像头实际分辨率
示例程序:
import cv2
#创建VideoWriter为写多媒体文件
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
vw = cv2.VideoWriter("C:\\Users\\Mengyang\\Desktop\\out.mp4",fourcc,25,(640,480))
#
#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',300,300)  #设置窗口大小
#获取视频设备
cap = cv2.VideoCapture(0)
#cap = cv2.VideoCapture("文件地址")   从文件获取视频
while True:
    #从摄像头读视频帧
    ret,frame = cap.read()
    #将视频帧在窗口中显示
    cv2.imshow('video',frame)
    #写数据到多媒体文件
    vw.write(frame)
    key = cv2.waitKey(1)  #不能为0,0为等待中断,只能读取到一帧的数据
    if(key & 0xFF == ord('q')):
        break
#释放资源
cap.release() #释放VideoCapture
vw.release() #释放VideoWrite
cv2.destroyAllWindows()  #释放窗口资源
代码优化
问题1:显示窗口为什么变大了?
在视频帧在窗口显示时重新设置一下窗口大小。
问题2:使用isOpened()判断摄像头是否已打开
问题3:采集数据时要判断数据是否获取到了
优化过的程序:
import cv2
#创建VideoWriter为写多媒体文件
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
vw = cv2.VideoWriter("C:\\Users\\Mengyang\\Desktop\\out.mp4",fourcc,25,(640,480))
#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',300,300)  #设置窗口大小
#获取视频设备
cap = cv2.VideoCapture(0)
#cap = cv2.VideoCapture("文件地址")   从文件获取视频
while cap.isOpened():    #判断摄像头是否已打开,若打开返回值则为True
    #从摄像头读视频帧
    ret,frame = cap.read()
    if ret ==True : #判断是否读取到数据
        #将视频帧在窗口中显示
        cv2.imshow('video',frame)
        cv2.resizeWindow('video',300,300)  #重新设置窗口大小
        #写数据到多媒体文件
        vw.write(frame)
        key = cv2.waitKey(1)  #不能为0,0为等待中断,只能读取到一帧的数据
        if(key & 0xFF == ord('q')):
            break
    else:
        break
#释放资源
cap.release() #释放VideoCapture
vw.release() #释放VideoWrite
cv2.destroyAllWindows()  #释放窗口资源