您好,我是本际云服务器推荐网的小编小本本,今天想和大家分享一下OpenCV中cv2.VideoCapture函数的应用。通过cv2.VideoCapture我们可以读取录像或监控摄像头,并进行储存帧图像或者视频的操作。感兴趣的朋友们一起来了解一下吧!

一、词法:cap=cv2.VideoCapture(0)
该函数的主要参数0表示默认笔记本电脑内嵌的第一个监控摄像头。如果需要载入已有的小视频,则主要参数改成视频所在路径,例如:cap=cv2.VideoCapture(‘video.mp4’)。
二、词法:cap.isOpened()
使用该函数可以判断视频是否载入成功,如果成功则返回True。
三、词法:ret,frame=cap.read()
利用该函数可以按帧读取视频,其中ret是一个布尔型变量,如果载入成功,则返回True;如果载入失败或者已经读取完所有帧,则返回False。而frame则表示每一秒的图像,是一个三维的数组,即frame.shape=(640,480,3),载入的图像格式为BGR。
四、词法:key=cv2.waitKey(1)
该函数主要用于等待数字键盘输入。主要参数1表示延迟1ms切换至下一帧,主要参数为0则表示已经完全停止。
五、读取监控摄像头并保存为视频代码讲解
我们可以使用以下代码来载入监控摄像头并进行视频保存:
import cv2
def videocapture():
cap=cv2.VideoCapture(0) # 生成读取摄像头对象
width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 获取视频的宽度
height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 获取视频的高度
fps=cap.get(cv2.CAP_PROP_FPS) # 获取视频的帧率
fourcc=int(cap.get(cv2.CAP_PROP_FOURCC)) # 视频的编码
# 定义视频对象输出
writer=cv2.VideoWriter("video_result.mp4",fourcc,fps,(width,height))
while cap.isOpened():
ret,frame=cap.read() # 读取摄像头画面
cv2.imshow('teswell',frame) # 显示画面
key=cv2.waitKey(24)
writer.write(frame) # 视频保存
# 按Q退出
if key==ord('q'):
break
cap.release() # 释放摄像头
cv2.destroyAllWindows() # 释放所有显示图像窗口
if __name__=='__main__':
videocapture()
六、读取视频并按帧保存代码演示
以下代码可以读取视频并将每帧图像按照一定规律进行保存:
import numpy as np
import cv2
import os
def video2image(video_dir,save_dir):
cap=cv2.VideoCapture(video_dir) # 生成读取视频对象
n=1 # 计数
width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 获取视频的宽度
height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 获取视频的高度
fps=cap.get(cv2.CAP_PROP_FPS) # 获取视频的帧率
fourcc=int(cap.get(cv2.CAP_PROP_FOURCC)) # 视频的编码
# 定义视频输出
# writer=cv2.VideoWriter("teswellvideo_02_result.mp4",fourcc,fps,(width,height))
i=0
timeF=int(fps) # 视频帧计数间隔频率
while cap.isOpened():
ret,frame=cap.read() # 按帧读取视频
# 到达视频结尾时终止
if ret is False:
break
# 每隔timeF帧进行存储操作
if(n%timeF==0):
i+=1
print('保存第%s张图像'%i)
save_image_dir=os.path.join(save_dir,'%s.jpg'%i)
print('save_image_dir:',save_image_dir)
cv2.imwrite(save_image_dir,frame) # 保存视频帧图像
n=n+1
cv2.waitKey(1) # 延时1ms
cap.release() # 释放视频对象
# 读取文件夹中所有视频,每个视频按帧保存图像
def video2image_multi(video_path,save_path):
video_list=os.listdir(video_path)
for i in range(len(video_list)):
video_dir=os.path.join(video_path,video_list[i])
cap=cv2.VideoCapture(video_dir)
fps=cap.get(cv2.CAP_PROP_FPS) # 视频的帧率
save_num=0
n=1 # 计数
timeF=int(fps) # 视频帧计数间隔频率
while cap.isOpened():
ret,frame=cap.read()
if ret is False:
break
# 每隔timeF帧进行存储操作
if(n%timeF==0):
save_num+=1
save_image_dir=os.path.join(save_path,'%s_%s.jpg'%(i,save_num))
cv2.imwrite(save_image_dir,frame)
n=n+1
cv2.waitKey(1)
cap.release()
print('读取第%s个视频完成!!!'%i)
if __name__=='__main__':
video2image(r'E:\AIvideo.mp4',r'E:\AIvideo2image')
以上是小编带来的OpenCV中cv2.VideoCapture函数的应用介绍,希望能够帮助大家学习OpenCV的使用。有兴趣的朋友可以多多研究一下哦!
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6934.html
