代码如下:

# -*- coding: utf-8 -*-#
# Author:       weiz
# Date:         2019/11/26 10:22
# Name:         main
# Description:
import os
import cv2
import shutildef video2images(video_p_n, img_p, dst_folder, index):video = cv2.VideoCapture()if not video.open(video_p_n):print("can not open the video")exit(1)count = 1while True:_, frame = video.read()if frame is None:breakif count % dst_folder == 0:save_path = "{}_{:>05d}.png".format(dst_folder, index)save_path = img_p + '/' + save_pathcv2.imwrite(save_path, frame, (cv2.IMWRITE_PNG_COMPRESSION, 0))index += 1count += 1video.release()# 打印出所提取帧的总数/以及原本视频总帧数print("Totally save {:d}/{:d} pics".format((index-1), count))if __name__ == '__main__':videoPath = "./video"       # 视频存放的文件夹genImages = "./images"      # 最后图片保存的位置EXTRACT_FREQUENCY = 10      # 帧提取频率print("workSpace:{}".format(os.getcwd()))videoName = os.listdir(videoPath)if os.path.exists(genImages):shutil.rmtree(genImages)  # 删除原来的图片库,以防混乱print("Old images deleted!")os.mkdir(genImages)for name in videoName:imglib = genImages + '/' + name[:-4]os.mkdir(imglib)video_p_n = videoPath + '/' + namevideo2images(video_p_n, imglib, EXTRACT_FREQUENCY, 1)

源视频大小为:633.4MB

视频转不同格式图片的情况:

生成图片的格式 生成图片总大小 单幅图片大小 生成时设置的参数
jpg 551.1MB 286.9KB 95(jpg默认的参数)
png 1.8GB 913.7KB 3(png默认的参数)
png 11.2GB 6.2MB 0(png图片压缩率最小)
bmp 11.2GB 6.2MB

说明:

  1. 只要是jpg格式的图片就会压缩,在opencv中图片压缩后的质量参数为0到100,默认是95。
  2. png格式比jpg格式会好,属于高质量的图片保存格式。opencv中压缩等级从0到9,默认是3,压缩速度最快。
  3. bmp格式的图片是无损图片格式,但占用的磁盘内存会比较大。没有找到与bmp格式设置相关的说明及参数。
  4. 视频转成jpg格式的图片,图片的像素与源视频中的像素会有所不同。如果用视频和转成图片后分别用于训练、识别等任务,可能会造成不一样的结果。这点需要注意。
  5. 一般生成默认的png图片就够用,即:压缩等级为3。
  6. 生成图片总大小也与视频转图片时的提取率有关。上面的代码提取率是每10张提取一张。

opencv官网说明

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time        :2020/10/12 13:33
# @Author      :weiz
# @ProjectName :yoloProcessedData
# @File        :video2images.py
# @Description :将视频切分成图片
import os
import cv2
import shutildef checkFileExist(fileName, isCreate=None):"""检测当前工作目录下fileName文件是否存在,并根据isCreate是否创建:param fileName:文件夹名字:param isCreate:是否创建:return:不存在返回false,存在或者创建返回true"""if isCreate == True:isCreate = Trueelse:isCreate = Falseif os.path.exists(fileName):return Trueelse:if isCreate:os.mkdir(fileName)print("the path:{} is builded!".format(fileName))return Trueelse:return Falsedef video2image(videoPath, imagePath, gap, isClearImagePath):"""将视频分割图片:param videoPath: 视频所在路径:param imagePath: 保存图片的路径:param gap: 每隔多少取一帧:param isClearImagePath: imagePath文件夹存在是否删除并重新创建:return: """if not checkFileExist(videoPath):print("The {} is not exist!".format(videoPath))returnif isClearImagePath:if checkFileExist(imagePath):shutil.rmtree(imagePath)  # 删除原来的图片库,以防混乱print("Old {} deleted!".format(imagePath))checkFileExist(imagePath, True)else:if not checkFileExist(imagePath, True):print("The {} is not exist!".format(imagePath))returnvideoNames = os.listdir(videoPath)for videoName in videoNames:name, suffix = videoName.split(".")imagePath_sub = imagePath + "/" + name  # imagePath的子目录os.mkdir(imagePath_sub)videoRoot = videoPath + "/" + videoName  # 视频的绝对路径cap = cv2.VideoCapture(videoRoot)frameNum = 1imageNumName = 0print(videoRoot)while (True):ret, frame = cap.read()if not ret:breakif frameNum % gap == 0:# 图片的保存路径savePath = imagePath_sub + "/" + name + "_" + "{:0>6d}".format(imageNumName) + ".png"imageNumName = imageNumName + 1cv2.imwrite(savePath, frame)if frameNum % (100*gap) == 0:print(frameNum)frameNum = frameNum + 1videoPath = "./videos"
imagePath = "./images"
gap = 10
isClearImagePath = True
if __name__ == "__main__":video2image(videoPath, imagePath, gap, isClearImagePath)

使用opencv把视频转图片以及图片模糊问题相关推荐

  1. opencv读取视频并保存为图片

    1.功能: opencv读取指定文件夹中的视频文件,按照一定的间隔截取某些帧,将这些帧图像连续命名,存储在指定文件夹里. 2.代码如下: (1)IplImage #include <stdlib ...

  2. OpenCV将视频拆分为为图片

    import os import cv2 import shutil from PIL import Image import datetime# 将视频拆分为图片 def splitFrames(v ...

  3. 用OpenCV将视频分解成单帧图片,图片合成视频

    本文做的是基于opencv将视频帧转成图片输出,由于一个视频包含的帧数过多,经常我们并不是需要它的全部帧转成图片,因此我们希望可以设置每隔多少帧再转一次图片(本文设置为30帧),若有人需求是只需要前多 ...

  4. python图片转视频加特效_使用Python opencv实现视频与图片的相互转换

    因为最近要经常转换数据集进行实验,因此记录一下. 1.视频转图片 即为将视频解析为一帧一帧的图片: import cv2 vc=cv2.VideoCapture("/home/hqd/Pyc ...

  5. python opencv PIL 视频分割成图片 图片合成为视频 修改图片大小(抗锯齿)

    Python代码将原有的视频分割成图片,我的例子是一帧一帧的分割 用python+opencv完成视频的分割 import cv2 #导入opencv模块 print(2) #测试是否运行 vc=cv ...

  6. 图像处理之opencv保存视频图片

    OpenCV: OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和 ...

  7. OpenCV将视频转存为一帧帧的图片(Python)

    利用OpenCV将视频逐帧保存,代码如下. #coding=utf-8 import cv2 import ospath = 'video' video_list = os.listdir(path) ...

  8. PYQT5+openCV项目实战:微循环仪图片、视频记录和人工对比软件(附源码)

    文章目录 1.主要功能 1.1主界面说明 1.2回查记录界面说明 2.主界面功能详解 2.1 摄像头操作 2.2拍照功能 2.3保存图片 2.4录制短视频 2.5查看记录 2.6新建名称 3.子界面功 ...

  9. C++Opencv实时读取摄像头视频保存指定帧图片

    空格截图到指定文档 string writePath = "../temp/"; int main(int argc, char** argv){VideoCapture capt ...

  10. OpenCV保存视频图片相关

    环境: ubuntu1404, openCV2.4.13 1.从usb camera在线读取显示图片并保存视频和图片: #include <opencv2/core/core.hpp> # ...

最新文章

  1. python库numpy基本用法
  2. python教程:文件读写
  3. html div box,html – 为转换后的div添加box-shadow
  4. oracle sum(col1) over(partition by col2 order by col3):实现分组递增汇总
  5. centos安装mysql8.0
  6. html加了文档声明之后页面错乱,为登陆页面扩展和配置设计导入程序
  7. 《深度学习笔记》——训练加速篇
  8. Duilib自定义控件
  9. 大连东软信息学院附近java_大连东软信息学院暑期实训java项目答辩答案
  10. markdown引入代码_将Swagger2文档导出为HTML或markdown等格式离线阅读
  11. JDK动态代理简单实现
  12. 考拉消息中心消息盒子处理重构(策略模式)
  13. 休假管理系统的用况详情和用况表
  14. 用html画一个企鹅图案的代码,6张思维导图,帮你搞定html、css(css画QQ企鹅)
  15. php resque demo,php-resque 极简php消息队列
  16. lcd显示数字+0x30
  17. 08.音频系统:第002节_Android音频系统框架简述
  18. 杭电计算机研究生复试题
  19. 计算机毕业设计(附源码)python校园社团管理系统
  20. How To Install GLPI 9.5 On CentOS7

热门文章

  1. 5.vue知识点vue router
  2. 解决Chrome插件安装时.cxr 程序包无效:CRX_HEADER_INVALID
  3. overleaf使用技巧
  4. 初中数学抽象教学的案例_初中数学情景教学案例
  5. 如何从初级运营成长为运营总监?
  6. android 版本图片,Android - 图片处理之Glide4.0版本
  7. 合同的收据和发票的区别
  8. python十点半纸牌游戏教程
  9. WEB>SSRF(URL Bypass,数字IP Bypass,302跳转Bypass,DNS重绑定Bypass)
  10. 2021年9月电子学会图形化三级编程题解析含答案:绘制图形