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实现数组插入新元素的方法
May 22 Python
python实现将文本转换成语音的方法
May 28 Python
python自带的http模块详解
Nov 06 Python
python实现一个简单的并查集的示例代码
Mar 19 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 Python
Python多线程threading模块用法实例分析
May 22 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
Django实现列表页商品数据返回教程
Apr 03 Python
用python对oracle进行简单性能测试
Dec 05 Python
Pandas自定义选项option设置
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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
一端时间轮换的广告
2006/06/26 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
Sanic框架Cookies操作示例
2018/07/17 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
2019/08/22 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
预备党员思想汇报范文
2013/12/29 职场文书
总经理任命书
2014/03/29 职场文书
初中班主任评语
2014/04/24 职场文书
社区春季防火方案
2014/06/02 职场文书
2014年四风问题个人对照自查剖析材料
2014/09/15 职场文书
新员工考核评语
2014/12/31 职场文书
五四青年节活动总结
2015/02/10 职场文书
2015年教学工作总结
2015/04/02 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python