import os
import cv2    ##加载OpenCV模块def video2frames(pathIn='', pathOut='', imgname='',only_output_video_info = False, extract_time_points = None, initial_extract_time = 0,end_extract_time = None,extract_time_interval = -1, output_prefix = 'img',jpg_quality = 100,isColor = True):'''pathIn:视频的路径,比如:F:\python_tutorials\test.mp4pathOut:设定提取的图片保存在哪个文件夹下,比如:F:\python_tutorials\frames1\。如果该文件夹不存在,函数将自动创建它only_output_video_info:如果为True,只输出视频信息(长度、帧数和帧率),不提取图片extract_time_points:提取的时间点,单位为秒,为元组数据,比如,(2, 3, 5)表示只提取视频第2秒, 第3秒,第5秒图片initial_extract_time:提取的起始时刻,单位为秒,默认为0(即从视频最开始提取)end_extract_time:提取的终止时刻,单位为秒,默认为None(即视频终点)extract_time_interval:提取的时间间隔,单位为秒,默认为-1(即输出时间范围内的所有帧)output_prefix:图片的前缀名,默认为frame,图片的名称将为frame_000001.jpg、frame_000002.jpg、frame_000003.jpg......jpg_quality:设置图片质量,范围为0到100,默认为100(质量最佳)isColor:如果为False,输出的将是黑白图片'''cap = cv2.VideoCapture(pathIn)  ##打开视频文件n_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))  ##视频的帧数fps = cap.get(cv2.CAP_PROP_FPS)  ##视频的帧率print(fps)dur = n_frames/fps  ##视频的时间##如果only_output_video_info=True, 只输出视频信息,不提取图片if only_output_video_info:print('only output the video information (without extract frames)::::::')print("Duration of the video: {} seconds".format(dur))print("Number of frames: {}".format(n_frames))print("Frames per second (FPS): {}".format(fps)) ##提取特定时间点图片elif extract_time_points is not None:if max(extract_time_points) > dur:   ##判断时间点是否符合要求raise NameError('the max time point is larger than the video duration....')try:os.mkdir(pathOut)except OSError:passsuccess = Truecount = 0while success and count < len(extract_time_points):cap.set(cv2.CAP_PROP_POS_MSEC, (1000*extract_time_points[count])) success,image = cap.read()if success:if not isColor:image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  ##转化为黑白图片print('Write a new frame: {}, {}th'.format(success, count+1))cv2.imwrite(os.path.join(pathOut, "{}_{}.jpg".format(output_prefix, imgname)), image, [int(cv2.IMWRITE_JPEG_QUALITY), jpg_quality])     # save frame as JPEG filecount = count + 1else:##判断起始时间、终止时间参数是否符合要求if initial_extract_time > dur:raise NameError('initial extract time is larger than the video duration....')if end_extract_time is not None:if end_extract_time > dur:raise NameError('end extract time is larger than the video duration....')if initial_extract_time > end_extract_time:raise NameError('end extract time is less than the initial extract time....')##时间范围内的每帧图片都输出if extract_time_interval == -1:if initial_extract_time > 0:cap.set(cv2.CAP_PROP_POS_MSEC, (1000*initial_extract_time)) try:os.mkdir(pathOut)except OSError:passprint('Converting a video into frames......')if end_extract_time is not None:N = (end_extract_time - initial_extract_time)*fps + 1success = Truecount = 0while success and count < N:success,image = cap.read()if success:if not isColor:image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)print('Write a new frame: {}, {}/{}'.format(success, count+1, n_frames))cv2.imwrite(os.path.join(pathOut, "{}_{}.jpg".format(output_prefix, imgname)), image, [int(cv2.IMWRITE_JPEG_QUALITY), jpg_quality])     # save frame as JPEG filecount =  count + 1else:success = Truecount = 0while success:success,image = cap.read()if success:if not isColor:image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)print('Write a new frame: {}, {}/{}'.format(success, count+1, n_frames))cv2.imwrite(os.path.join(pathOut, "{}_{}.jpg".format(output_prefix, imgname)), image, [int(cv2.IMWRITE_JPEG_QUALITY), jpg_quality])     # save frame as JPEG filecount =  count + 1##判断提取时间间隔设置是否符合要求    elif extract_time_interval > 0 and extract_time_interval < 1/fps:raise NameError('extract_time_interval is less than the frame time interval....')elif extract_time_interval > (n_frames/fps):raise NameError('extract_time_interval is larger than the duration of the video....')##时间范围内每隔一段时间输出一张图片else:try:os.mkdir(pathOut)except OSError:passprint('Converting a video into frames......')if end_extract_time is not None:N = (end_extract_time - initial_extract_time)/extract_time_interval + 1success = Truecount = 0while success and count < N:cap.set(cv2.CAP_PROP_POS_MSEC, (1000*initial_extract_time+count*1000*extract_time_interval)) success,image = cap.read()if success:if not isColor:image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)print('Write a new frame: {},{}th'.format(success, count+1))cv2.imwrite(os.path.join(pathOut, "{}_{}.jpg".format(output_prefix,imgname)), image, [int(cv2.IMWRITE_JPEG_QUALITY), jpg_quality])     # save frame as JPEG filecount = count + 1else:success = Truecount = 0while success:cap.set(cv2.CAP_PROP_POS_MSEC, (1000*initial_extract_time+count*1000*extract_time_interval)) success,image = cap.read()if success:if not isColor:image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)print('Write a new frame: {}, {}th'.format(success, count+1))cv2.imwrite(os.path.join(pathOut, "{}_{}.jpg".format(output_prefix, imgname)), image, [int(cv2.IMWRITE_JPEG_QUALITY), jpg_quality])     # save frame as JPEG filecount = count + 1if __name__ == "__main__":pathIn = 'C:/Users/Administrator/www/video_back/video_back/upload/1.mp4'pathOut = 'C:/Users/Administrator/www/video_back/video_back/upload/'imgname = 'dog'video2frames(pathIn,pathOut,imgname,extract_time_points=(1,))

转载于:https://www.cnblogs.com/sumafan/p/10816331.html

pyhthon Opencv截取视频中的图片相关推荐

  1. opencv-python截取视频中的图片

    import cv2 cap = cv2.VideoCapture(file_path.encode('utf-8')) # 按照绝对路径打开视频 if cap.isOpened():# cap.se ...

  2. python3抓取图片视频_Python opencv提取视频中的图片

    #-*- coding: utf-8 -*- importosimport cv2 ##加载OpenCV模块 def video2frames(pathIn='', pathOut='', only_ ...

  3. python截取图片的ROI+OpenCV 在坐标中显示图片+鼠标点击图片显示点坐标

    又来做下笔记了.现在我的毕业设计进行到数据处理的阶段,要在乳腺图像上截取4张相同大小的1024*1024图片,并且每张图片都必须覆盖微钙化点,以下是我现在用到的一些简单程序. 1.首先是截图程序如下: ...

  4. 从视频中提取图片(截取ppt)

    从视频中提取图片 大聪明2.0上线 本文将介绍如何快速从网课视频中提取ppt Step1 从视频中提取图片 使用win自带的"电影与电视" 点击这个小铅笔,选择"保存视频 ...

  5. python OpenCV 按时间间隔截取视频中任意片段帧

    通过视频制作相应的数据集,截取视频中的任意片段帧. 使用python截取视频中的任意片段帧,直接上代码: import cv2 import os# 定义视频文件路径和保存图像文件路径 video_p ...

  6. python提取图片文字视频教学_用Python提取视频中的图片

    小编自己码的通用型函数,支持各种常用视频格式,可满足常用需求,亲测效果和速度都不错. 想获取本文数据和完整代码的下载链接,请关注微信公众号"R语言和Python学堂",并回复发文日 ...

  7. 如何截取视频中的一部分制作成GIF动态图

    如何截取视频中的一部分制作成GIF动态图?关于截取视频于转换视频格式这方面,可能还有很多朋友不能有效解决问题,当然,这和我们的操作能力关系不大,更重要的是需要一款简单实用的视频转换器,网上关于怎样把视 ...

  8. FFmpeg命令(三)、 从视频中提取图片

    FFmpeg 从视频中提取图片 ffmpeg -i test.mp4 -r 30 image-%3d.jpg ffmpeg -i test.mp4 -r 30 -t 4 image-%3d.jpg f ...

  9. 如何截取视频中的一部分,制作成GIF动态图

    怎么把视频做成gif 截取视频中的一部分内容,制作成GIF动态图?是先用播放器进行截取,还是说先转换视频格式,然后用相应的GIF编辑器呢.网上关于怎样把视频截取转化成gif动态图片的方法有很多,林林总 ...

  10. 小程序收集箱:提取视频中的图片(python)

    本程序用于提取视频中的图片.本程序由其他博主提供,在此表示感谢. 如有疑问可联系hardenqiu@foxmail.com. # -*- coding: utf-8 -*- import os imp ...

最新文章

  1. python学习笔记(一)之入门
  2. 解题报告:luogu P4180 [BJWC2010]严格次小生成树(次小生成树、倍增LCA优化、O(mlogn) )
  3. nginx http转https_Nginx处理访问www域名跳转到不带www域名的配置方法
  4. 《分布式服务架构:原理、设计与实战》第二章彻底解决分布式系统一致性的问题...
  5. matlab zp2,matlab用于控制系统数字仿真
  6. 使用plsql连接远程oracle数据库配置
  7. 15 FFT及其框图实现
  8. 欢乐纪中A组周六赛【2019.3.30】
  9. 我发起了一个 .Net Core 平台上的 分布式缓存 开源项目 ShareMemory 用于 取代 Redis...
  10. 基于C++实现的贪吃蛇游戏设计
  11. ibm服务器安装ghostxp系统,IBM ThinkPad X61s安装WIN XP系统
  12. Albumentation使用指南
  13. 国内就能读的中国人民大学与加拿大女王大学金融硕士,为职业发展的下一个阶段积蓄能量
  14. Wireshark使用技巧
  15. 【第二十篇】Flowable中的任务回退
  16. AI绘图–Disco Diffusion使用指南+本地化保姆级教程
  17. 十款常用Linux系统介绍
  18. 医疗器械软件 软件生存周期过程
  19. 计算机在机电一体化应用,关于计算机技术在机电一体化专业中的应用探讨
  20. matlab 2016b vs2010,在Matlab2010b中调用 Microsoft Visual C++ 2010

热门文章

  1. k8s升级从1.13到1.16教程与采坑解决办法
  2. android 内存泄漏问题【转】
  3. 五分钟搭建一个MarkDown文档解析器
  4. Android KeyCode 列表
  5. Extjs的radio单选框的使用
  6. storage相关网站
  7. C/C++程序员面试宝典-2
  8. 用网络附加存储(NAS)构建(本地及远程)、数据容灾
  9. linux7 ftp服务器,Centos7下搭建FTP服务器
  10. inline-block的几个问题(还没解决)