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

AI 摘要 / TL;DR

此篇文章主要是给大家介绍一下OpenCV中cv2.VideoCapture函数的应用,并通过cv2.VideoCapture读取录像或监控摄像头及其开展储存帧图象或者视频,感兴趣的朋友可以看看。 一、词法:cap=cv2.VideoCapture(0) 表明:主要参数0表明默认笔记本电脑的内嵌第一位监控摄像头,必要时载

来源: 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<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:AIvideo.mp4',r'E:AIvideo2image')

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