# Python运用VideoCapture读取录像或监控摄像头然后进行储存

> 作者/来源: UCloud 运营管理员
> 发布时间: 2022-12-21T13:46:00.000Z
> 分类: 其他
> 标签: AI, 存储, Python
> 原文链接: http://117.50.162.249:3000/yun/articles/2006

---

# Python运用VideoCapture读取录像或监控摄像头然后进行储存

> 来源: https://www.ucloud.cn/yun/128696.html
> 作者: 89542767
> 发布日期: 发布于2022-12-21 21:46

此篇文章主要是给大家介绍一下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&lt;i&gt;)
　　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:AIvideo.mp4',r'E:AIvideo2image')
```

　　以上就是小编给大家介绍的，希望可以给大家带来一定帮助。