您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:opencv读取视频并保存图像的方法

51自学网 2021-10-30 22:32:15
  python
这篇教程opencv读取视频并保存图像的方法写得很实用,希望能帮到您。

问题重述

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

image-20210325225623015

实现步骤 添加依赖库

import cv2import 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 cv2import osdef 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()保存图像路径不能存在中文字符,否则无法保存,并且没有任何提示!!!

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

最终结果

image-20210325230120160

00001

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


Python还能这么玩之用Python做个小游戏的外挂
Python包argparse模块常用方法
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。