视频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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java面试宝典(超级详细)「建议收藏」

    一、Java基础1.JDK和JRE有什么区别?JDK:JavaDevelopmentKit的简称,java开发工具包,提供了java的开发环境和运行环境。JRE:JavaRuntimeEnvironment的简称,java运行环境,为java的运行提供了所需环境。具体来说JDK其实包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具。简单来说:如果你需要运行java程序,只需安装JRE就可

    2022年4月5日
  • linux查看全部环境变量_linux刷新环境变量命令

    linux查看全部环境变量_linux刷新环境变量命令阅读目录linux查看环境变量linux变量的种类设置变量的三种方法使用unset删除指定的环境变量删除PATH环境变量指定值常用的环境变量其他linux查看环境变量1.使用echo命令查看单个环境变量。例如:echo$PATH2.使用env查看所有环境变量。例如:env3.使用set查看所有本地定义的环境变量。linux变量的种类按变量的生存周期来划分,Linux变量可分…

    2022年10月1日
  • C语言中函数指针和回调函数的详解「建议收藏」

    C语言中函数指针和回调函数的详解「建议收藏」函数指针:指向函数的指针变量。因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数…

    2022年6月22日
  • 微信小程序快速接口编写

    微信小程序快速接口编写

    2021年9月17日
  • java面试总是通不过_读完这篇文章你有什么感受

    java面试总是通不过_读完这篇文章你有什么感受Java面试题千千万,个人觉得没有最好的答案,只有最适合的答案;本文的宗旨是为读者朋友们整理一份详细而又权威的面试清单。此文是前段时间本人根据部分文章汇总压在草稿箱(由于时间关系,忘了加上对应的原创链接,如有侵权,请联系本人删除,本人单纯秉着知识乐于分享的精神),今天发现在草稿箱,特发出来给大家,仅供参考。注:本人才疏学浅,知识还在积累中,不能保证每个回答都满足各种等级的高手们,(由于一些技术的升级,部分答案不能保证实时同步准确,还请大家在阅读的时候多多留意)若发现有问题的话,请评论指出。…….

    2022年10月6日
  • 移植FreeRTOS到ATmega128单片机

    移植FreeRTOS到ATmega128单片机

    2021年8月19日

发表回复

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

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