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查询mysql中文乱码问题
Nov 09 Python
十个Python程序员易犯的错误
Dec 15 Python
python dict.get()和dict['key']的区别详解
Jun 30 Python
python中异常捕获方法详解
Mar 03 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
python 实现return返回多个值
Nov 19 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
Python pandas如何向excel添加数据
May 22 Python
如何用python处理excel表格
Jun 09 Python
如何解决安装python3.6.1失败
Jul 01 Python
python使用ctypes库调用DLL动态链接库
Oct 22 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
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
使用Sphinx对索引进行搜索
2013/06/25 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
2013/07/05 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
PHP $O00OO0=urldecode & eval 解密,记一次商业源码的去后门
2020/09/13 PHP
DOM相关内容速查手册
2007/02/07 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
JSON取值前判断
2014/12/23 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
js滚轮事件兼容性问题需要注意哪些
2016/11/15 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
用python写的一个wordpress的采集程序
2016/02/27 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
Django中的ajax请求
2018/10/19 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
OpenCV 模板匹配
2019/07/10 Python
Django中提示消息messages的设置方式
2019/11/15 Python
将python安装信息加入注册表的示例
2019/11/20 Python
pycharm实现猜数游戏
2020/12/07 Python
大学毕业谢师宴致辞
2015/07/27 职场文书
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript