Python利用VideoCapture读取视频或摄像头并进行保存
作者:AI算法联盟
这篇文章主要为大家介绍一下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__' : video_to_image(r'E:\AI\video.mp4', r'E:\AI\video2image')
以上就是Python利用VideoCapture读取视频或摄像头并进行保存的详细内容,更多关于Python VideoCapture读取视频 摄像头的资料请关注脚本之家其它相关文章!