视频2图片video_to_images

视频2图片video_to_images

本程序主要讲视频转化为图片

创建video_to_images.py

#-*- coding: utf-8 -*-
#使用本程序的方法:
#1. 安装python3
#2. 安装numpy, 命令 pip3 install numpy
#3. 安装opencv-python, 命令:pip3 install opencv-python
#4. 将该脚本放置在存储视频的文件夹中,利用python执行此脚本。

import os
import sys
filedir = os.path.dirname(sys.argv[0])      #获取脚本所在目录
os.chdir(filedir)       #将脚本所在的目录设置为工作目录
wdir = os.getcwd()
print('当前工作目录:{}\n'.format(wdir))      #打印当前工作目录

import numpy as np
import cv2 as cv;
import re
from math import ceil

def video_to_image(video_path):
    print('\n-----------------------------------------------------------------------------')
    print('正在处理视频:{}\n'.format(video_path))
    
    video_dir = os.path.dirname(video_path)
    video_name = os.path.basename(video_path)
    
    image_dir = re.sub('\.','_',video_name)
    image_dir = os.path.join(video_dir, image_dir)
    if not os.path.exists(image_dir):
        os.mkdir(image_dir)

    cap = cv.VideoCapture(video_path)
    # Define the codec and create VideoWriter object
    fps = cap.get(5)   #视频帧率
    width = cap.get(3)
    height = cap.get(4)
    sample_rate = round(fps)   #采样率,目前设置为每秒取1帧。
    
    #print("视频  {}  的帧率为:{:.2f}  分辨率为:{} ✖ {}".format(video_path, fps, width, height))
    print("视频  {} 的帧率为:{}  分辨率为:{} * {}".format(video_path, fps, width, height))
	
    n=0
    new_img_num = 0
    old_img_num = 0
    while(cap.isOpened()):
        ret, frame = cap.read()
        if ret==True:
            #cv.imshow('frame1', frame)
            n=n+1
            
            if n%sample_rate == 1:
                
                image_name = video_name+'_'+str(n)+'.jpg'
                image_path = os.path.join(image_dir, image_name)
                if os.path.exists(image_path):
                    print('{}  已经存在。'.format(image_path))
                    old_img_num += 1
                else :
                    print(image_path)
                    cv.imwrite(image_path,frame)
                    new_img_num += 1
            
            if cv.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break
        
    # Release everything if job is finished

    cap.release()
    print('视频处理完毕,共{}帧。每{}帧采1张,可生成{}张图片。\n'.format(n, sample_rate, ceil(n/sample_rate)))
    print('此前已有图片{}张,本次生成{}张。\n'.format(old_img_num, new_img_num))

ext = ('.h264', '.MOV')
#遍历工作目录,并对其中指定格式的视频文件进行处理。    
# def search(path):
    # for p in os.listdir(path):
        # p = os.path.join(path, p)
        # if os.path.isdir(p):
            # search(p)
        # elif p.endswith(ext):
            # video_to_image(p)

# search(wdir) 

for dirpath, dirname, filename in os.walk(wdir):
    for f in filename:
        if f.endswith(ext):
            video_path = os.path.join(dirpath, f)
            video_to_image(video_path)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2158.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicat for mac激活码【中文破解版】

    (navicat for mac激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    43
  • java inputstreamreader类详解_inputstreamreader是什么流

    java inputstreamreader类详解_inputstreamreader是什么流java底层从计算机读取的统统都是二进制,所以一开始我们读取的时候都是先简历连接通道,然后将文件数据以字节流的形式读取进入通道。#建立连接Filefile=newFile(“a.txt”);#二进制流的通道。FileInputStreamfileInputStream=newFileInputStream(file);#你想啊,fileInputStr…

    2022年9月26日
    3
  • 数组和链表的区别和优缺点总结!

    数组和链表的区别和优缺点总结!数组和链表是两种基本的数据结构,他们在内存存储上的表现不一样,所以也有各自的特点。链表中各结点在内存中的存放位置是任意的。 链表与数组的主要区别(1)数组的元素个数是固定的,而组成链表的结点个数可按需要增减;(2)数组元素的存诸单元在数组定义时分配,链表结点的存储单元在程序执行时动态向系统申请:(3)数组中的元素顺序关系由元素在数组中的位置(即下标)确定,链表中的结点顺序关系…

    2022年6月16日
    27
  • LoadRunner简明教程[通俗易懂]

    LoadRunner简明教程[通俗易懂]LoadRunner是什么LoadRunner是一个性能测试工具,它最初是Mercury公司的产品,后背HP收购。LoadRunner常用来做什么l 验证某系统在某环境下是否满足性能需求。l 通过测试,规划如何达到要求的性能指标。l 调整系统环境,进行性能测试,最终使性能达到最优。为什么要使…

    2022年5月24日
    35
  • Oracle 语法

    Oracle 语法

    2021年12月14日
    48
  • BI_开发_问题:ORA-26002: Table DWH.W_XACT_TYPE_D has index defined upon it.

    BI_开发_问题:ORA-26002: Table DWH.W_XACT_TYPE_D has index defined upon it.

    2022年2月21日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号