资讯专栏INFORMATION COLUMN

Python迅速从短视频中获取视频帧的办法详细说明

89542767 / 482人阅读

  本文给大家介绍一类从视频里获取视频帧的办法,因为单核获取视频帧速率比较慢,因而接下来我们增强了线程同步的办法,感兴趣的朋友能够出手试一试


  Python迅速获取视频帧(线程同步)


  现在详细介绍一下一类从视频里获取视频帧的办法,因为单核获取视频帧速率比较慢,因而接下来我们增强了线程同步的办法。


  1、获取视频帧


  获取视频帧关键用了Opencv控制模块。


  在其中:


  camera=cv2.Videocapture(),函数公式主要通过启用笔记本电脑内置摄像头载入视频帧;


  res,image=camera.read()函数公式通常是按帧载入短视频,传参“res”是布尔型,取得成功载入回到True,载入不成功回到False;


  最终用cv2.imwrite()函数公式存放载入过的视频帧。


  视频帧获取方式可参考本文


  import cv2
  import os
  def video_to_frames(video_path,outPutDirName):
  times=0
  #提取视频的频率,每1帧提取一个
  frame_frequency=1
  #如果文件目录不存在则创建目录
  if not os.path.exists(outPutDirName):
  os.makedirs(outPutDirName)
  #读取视频帧
  camera=cv2.VideoCapture(video_path)
  while True:
  times=times+1
  res,image=camera.read()
  if not res:
  print('not res,not image')
  break
  #按照设置间隔存储视频帧
  if times%frame_frequency==0:
  cv2.imwrite(outPutDirName+''+str(times)+'.jpg',image)
  print('图片提取结束')
  #释放摄像头设备
  camera.release()

  2、线程同步方式


  线程同步的应用关键应用了threading库。


  在其中:


  threading.Thread()函数公式主要是用于启用线程同步,在其中主要参数“target”是上边需要用到的函数公式,主要参数“args”是上边函数的输入数据。


  在其中相关线程同步的详细介绍一下,及其速率提高效果可参考本文


  import threading
  threading.Thread(target=video_to_frames,args=(video_path,outPutDirName)).start()


  留意


  1、extract_frame方方法的入参分别是:键入视频地址、导出视频地址、短视频fps、视频尺寸宽、视频尺寸高、短视频必须抽走的起点帧、短视频必须抽走的完毕帧。


  3、整体代码


  import cv2
  import os
  import threading
  def video_to_frames(video_path,outPutDirName):
  times=0
  #提取视频的频率,每1帧提取一个
  frame_frequency=1
  #如果文件目录不存在则创建目录
  if not os.path.exists(outPutDirName):
  os.makedirs(outPutDirName)
  #读取视频帧
  camera=cv2.VideoCapture(video_path)
  while True:
  times=times+1
  res,image=camera.read()
  if not res:
  print('not res,not image')
  break
  if times%frame_frequency==0:
  cv2.imwrite(outPutDirName+''+str(times)+'.jpg',image)
  print('图片提取结束')
  camera.release()
  if __name__=="__main__":
  input_dir=r'D:datasetscow_dataset'#输入的video文件夹位置
  save_dir=r'E:relate_codedataset'#输出图片到当前目录video文件夹下
  count=0#视频数
  for video_name in os.listdir(input_dir):
  video_path=os.path.join(input_dir,video_name)
  outPutDirName=os.path.join(save_dir,video_name[:-4])
  threading.Thread(target=video_to_frames,args=(video_path,outPutDirName)).start()
  count=count+1
  print("%s th video has been finished!"%count)


  补充


  还可以利用Python实现抽取剔除视频帧工具


  代码


  下面是使用opencv对视频中间几帧抽取的方法。


  主要的思路是在读取frame的时候,顺便把帧写下来。


  同时如果不是需要抽取剔除的帧,直接continue到下个循环。


  样例代码如下,主要按照MP4格式进行处理。


  #!/user/bin/env python
  #coding=utf-8
  """
  project:csdn-pro
  author:剑客阿良_ALiang
  file:test.py
  ide:PyCharm
  time:2022-06-30 17:55:48
  """
  import cv2
  #视频抽帧
  def extract_frame(video_path:str,result_path:str,fps,weight,height,start,end):
  fourcc=cv2.VideoWriter_fourcc(*'mp4v')
  videoWriter=cv2.VideoWriter(result_path,fourcc,fps,(weight,height))
  vc=cv2.VideoCapture(video_path)
  if vc.isOpened():
  ret,frame=vc.read()
  else:
  ret=False
  count=0#count the number of pictures
  while ret:
  ret,frame=vc.read()
  if start<=count<=end:
  count+=1
  continue
  else:
  videoWriter.write(frame)
  count+=1
  print(count)
  videoWriter.release()
  vc.release()
  if __name__=='__main__':
  extract_frame('C:UsersxxxDesktop123.mp4','C:UsersxxxDesktop114.mp4',25,640,368,119,125)


  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128691.html

相关文章

  • B站智能防挡弹幕的一种python实现

    摘要:将图片的处理方法放到视频中的每一帧,再加上弹幕飞过的效果,就完成了版的智能防挡弹幕。不知道站的实现方法是怎样,是否有人工干预,是否有预计算。 某天代码写得老眼昏花,去B站上摸鱼,突然发现奇怪的现象: showImg(https://segmentfault.com/img/remote/1460000017911829?w=600&h=284); 哟呵,B站竟然做了 视频前景提取 ,把...

    jzzlee 评论0 收藏0
  • opencv python 从摄像头获取视频/从文件获取视频 /保存视频

    摘要:这次开始学习从摄像头获取视频使用获取视频要获取视频,需要创建一个对象,参数可以是设备索引摄像头索引或视频文件的名称。 这次开始学习Getting Started with Videos 1从摄像头获取视频 使用cv2.VideoCapture()获取视频. cv2.VideoCapture(builtins.object) 要获取视频,需要创建一个VideoCapture对象,参数可以...

    netmou 评论0 收藏0
  • 斯坦福新深度学习系统 NoScope:视频对象检测快1000倍

    摘要:通过利用一系列利用视频局部性的优化,显著降低了在每个帧上的计算量,同时仍保持常规检索的高精度。的差异检测器目前是使用逐帧计算的逻辑回归模型实现的。这些检测器在上的运行速度非常快,每秒超过万帧。也就是说,每秒处理的视频帧数超过帧。 视频数据正在爆炸性地增长——仅英国就有超过400万个CCTV监控摄像头,用户每分钟上传到 YouTube 上的视频超过300小时。深度学习的进展已经能够自动分析这些...

    xcold 评论0 收藏0
  • 10分钟学会使用YOLO及Opencv实现目标检测(下)|附源码

    摘要:摘要本文介绍使用和完成视频流目标检测,代码解释详细,附源码,上手快。将应用于视频流对象检测首先打开文件并插入以下代码同样,首先从导入相关数据包和命令行参数开始。 摘要: 本文介绍使用opencv和yolo完成视频流目标检测,代码解释详细,附源码,上手快。 在上一节内容中,介绍了如何将YOLO应用于图像目标检测中,那么在学会检测单张图像后,我们也可以利用YOLO算法实现视频流中的目标检...

    songze 评论0 收藏0
  • 前端工程师做Face Detection

    摘要:身为一名前业务程序员和现前端程序员,这样的功能还是陌生的领域。需求使用加摄像头,通过人脸检测,完成自动拍照功能。在的屏幕上,显示摄像头的实时画面,要是画面中检测出人脸,则触发拍照。这样做的效果能够获得更高的,同时还能完成更远距离脸部的捕获。 因为项目原因,需要使用人脸检测(face detection)功能。身为一名前JAVA业务程序员和现前端程序员,这样的功能还是陌生的领域。那能不能...

    nodejh 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<