opencv读取视频并保存图像的方法


Posted in Python onJune 04, 2021

问题重述

​ 实习项目要做安全帽目标检测,拿到了公司给的一些视频数据,使用Opencv读取视频并每隔 1 s 1s 1s存储一副图像,下面是一些视频数据

opencv读取视频并保存图像的方法

实现步骤 添加依赖库

import cv2
import os

定义视频路径和图像存储路径

video_path = './未戴安全帽视频01/'
image_path = './images/'

读取视频文件

video_files = [i for i in os.listdir(video_path) if i.split('.')[-1] in ['mp4']]
len(video_files)

获取视频帧

# video_file:'./未戴安全帽视频01/中建四局-东围墙5_001_2021-03-22-18-04-28_2021-03-22-18-04-33.mp4', 
# pic_dir:'中建四局-东围墙5_001_2021-03-22-18-04-28_2021-03-22-18-04-33'
def get_image(video_file, pic_dir):
    if not os.path.exists(pic_dir):
        os.makedirs(pic_dir)
    
    # cv2读取视频文件
    vc = cv2.VideoCapture(video_file)
    index = 0
    # 判断载入的视频是否可以打开
    rval = vc.isOpened()
    while rval:  # 循环读取视频帧
        index = index + 1
        
        rval, frame = vc.read()
        # 每十帧保存一张图片
        if index * 10 % 1 == 0:
            if rval:
                # cv2.imshow("capture", frame)
                save_file = pic_dir + str(index).zfill(5) + '.png'
                cv2.imwrite(save_file, frame)  # 存储为图像,保存名为文件夹名
                cv2.waitKey(1)
            else:
                break
        vc.release()
    print("已保存%d" %(index - 1) + "张图片")
        
# video_file = './未戴安全帽视频01/01.mp4'
# pic_path = '01/'
# get_image(video_file, image_path + pic_path)

遍历视频文件

for file in video_files:
    video_file = video_path + file
    pic_path = image_path + file.replace('.mp4', '/')
    get_image(video_file, pic_path)

已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片
已保存1张图片

完整代码

import cv2
import os


def save_img():
    video_path = r'F:\test\3.10'
    videos = os.listdir(video_path)
    for video_name in videos:
        file_name = video_name.split('.')[0]
        folder_name = video_path +'_'+ file_name
        os.makedirs(folder_name, exist_ok=True)
        print(video_path + '/' + video_name)
        vc = cv2.VideoCapture(video_path + '/' + video_name)
        # 读入视频文件
        c = 0
        rval = vc.isOpened()

        while rval:  # 循环读取视频帧
            c = c + 1

            rval, frame = vc.read()
            if c%10 ==0:
                pic_path = folder_name + '/'
                if rval:
                    cv2.imwrite(pic_path + str(c) + '.png', frame)  # 存储为图像,保存名为文件夹名
                    cv2.waitKey(1)
                else:
                    break
        vc.release()
        print('save_success')
        print(folder_name)


save_img()

存在问题

读取路径问题

问题:读取视频结果显示没有打开视频,检查发现视频路径错误,导致没有正确打开

解决:可以在读取之前检查路径,即判断要保存的文件夹是否存在,不存在就创建该文件夹。代码如下:

if not os.path.exists(path):
    os.makedirs(path)

中文路径问题

问题:cv2.imwrite()保存图像路径不能存在中文字符,否则无法保存,并且没有任何提示!!!

解决:改为英文路径即可。

最终结果

opencv读取视频并保存图像的方法

opencv读取视频并保存图像的方法

到此这篇关于opencv读取视频并保存图像的方法的文章就介绍到这了,更多相关opencv读取视频内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python获取当前时间的方法
Jan 14 Python
Python实现Const详解
Jan 27 Python
在Django的form中使用CSS进行设计的方法
Jul 18 Python
在Python中定义和使用抽象类的方法
Jun 30 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
基于pip install django失败时的解决方法
Jun 12 Python
对python requests发送json格式数据的实例详解
Dec 19 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
Python实现序列化及csv文件读取
Jan 19 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
python如何支持并发方法详解
Jul 25 Python
Python还能这么玩之用Python做个小游戏的外挂
Jun 04 #Python
python opencv旋转图片的使用方法
Python还能这么玩之用Python修改了班花的开机密码
Anaconda安装pytorch及配置PyCharm 2021环境
python如何利用cv2模块读取显示保存图片
Jun 04 #Python
Python实现socket库网络通信套接字
Jun 04 #Python
python cv2图像质量压缩的算法示例
Jun 04 #Python
You might like
使用NetBeans + Xdebug调试PHP程序的方法
2011/04/12 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
Python实现多进程共享数据的方法分析
2017/12/04 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
python获取栅格点和面值的实现
2020/03/10 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
python网络编程之五子棋游戏
2020/05/14 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
《与朱元思书》的教学反思
2014/04/17 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
政风行风评议工作总结
2014/10/21 职场文书
初中家长评语大全
2014/12/26 职场文书
大学生团员个人总结
2015/02/14 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
vue 实现上传组件
2021/05/31 Vue.js
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS