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将IP地址在整型和字符串之间轻松转换
Mar 22 Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
Python算法之求n个节点不同二叉树个数
Oct 27 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
Python使用遗传算法解决最大流问题
Jan 29 Python
Python将list中的string批量转化成int/float的方法
Jun 26 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
python使用Geany编辑器配置方法
Feb 21 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
python轮询机制控制led实例
May 03 Python
Python使用xpath实现图片爬取
Sep 16 Python
Django返回HTML文件的实现方法
Sep 17 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 字符串长度判断效率更高的方法
2014/03/02 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
实例讲解php数据访问
2016/05/09 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
2016/06/29 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
总结javascript三元运算符知识点
2018/09/28 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
详解微信UnionID作用
2019/05/15 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
[57:53]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#3OG VS VP
2016/03/03 DOTA
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
Windows下安装Scrapy
2018/10/17 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
Python字符串的修改方法实例
2019/12/19 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
目标责任书范本
2014/04/16 职场文书
金融与证券专业求职信
2014/06/22 职场文书
护士求职信
2014/07/05 职场文书
手机被没收的检讨书
2014/10/04 职场文书
中考学习决心书
2015/02/04 职场文书
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby