GUI界面的视频帧提取

news/2024/11/23 1:57:46/

由于毕业设计的方向是深度学习中YOLOV5算法在于视频检测中的应用。
在这种需要训练数据集的深度学习中,数据集的采集是首要目标。
程序作用:1、反馈视频总帧数
2、根据所需要的图片数目生成相应数目的随机数字序号,进行提取对应帧数图片。
3、根据每次数目不同建立不同文件夹。

程序代码块:

# -*- coding:utf-8 -*-
"""
制作人:Albert
时间:2021.11.08
地点:海南热带海洋学院图书馆
"""
import os
from random import randint
from shutil import move
from cv2 import IMWRITE_JPEG_QUALITY, imwrite, VideoCapture, CAP_PROP_POS_FRAMES
import wxclass Frame(wx.Frame):def __init__(self, path=None, cap=None, frames_num=None, dlg=None):wx.Frame.__init__(self, None, title='月兔视频帧图片提取器', size=(372, 418), name='frame', style=541071360)icon = wx.Icon(r'D:\Users\lenovo\Downloads\y.png')self.SetIcon(icon)self.panel = wx.Panel(self)self.Centre()self.bq1 = wx.StaticText(self.panel, size=(235, 38), pos=(52, 56), label='可提取视频帧数目:', name='staticText',style=17)bq1_Font = wx.Font(12, 74, 90, 400, False, 'Microsoft YaHei UI', 28)self.bq1.SetFont(bq1_Font)self.bq2 = wx.StaticText(self.panel, size=(104, 23), pos=(41, 125), label='提取图片数目', name='staticText',style=2321)bq2_Font = wx.Font(11, 74, 90, 400, False, 'Microsoft YaHei UI', 28)self.bq2.SetFont(bq2_Font)self.bjk1 = wx.TextCtrl(self.panel, size=(104, 27), pos=(196, 121), value='', name='text', style=0)self.an1 = wx.Button(self.panel, size=(74, 29), pos=(41, 203), label='1.打开文件', name='button')self.an1.Bind(wx.EVT_BUTTON, self.an1_anbdj)self.an2 = wx.Button(self.panel, size=(88, 29), pos=(143, 203), label='2:选择保存路径', name='button')self.an2.Bind(wx.EVT_BUTTON, self.an2_anbdj)self.an3 = wx.Button(self.panel, size=(74, 29), pos=(263, 203), label='4:开始', name='button')self.an3.Bind(wx.EVT_BUTTON, self.an3_anbdj)self.path = pathself.cap = capself.frames_num = frames_numself.dlg = dlgdef an1_anbdj(self, event):wildcard = u"视频文件 (*.mp4)|*.mp4|" \"All files (*.*)|*.*"dlg = wx.FileDialog(self, message=u"选择视频文件",defaultDir=os.getcwd(),defaultFile="",wildcard=wildcard,style=wx.FD_OPEN)if dlg.ShowModal() == wx.ID_OK:self.path = dlg.GetPath()self.cap = VideoCapture(self.path)self.frames_num = self.cap.get(7)self.bq1.SetLabelText('可提取视频帧数目:{}'.format(int(self.frames_num)))def an2_anbdj(self, event):self.dlg = wx.DirDialog(self, u"选择保存文件夹", style=wx.DD_DEFAULT_STYLE)if self.dlg.ShowModal() == wx.ID_OK:os.chdir(self.dlg.GetPath())os.getcwd()def an3_anbdj(self, event):key_num = int(self.bjk1.GetValue())if key_num > self.frames_num:key_num = self.frames_numbq3 = wx.StaticText(self.panel, size=(257, 22),pos=(47, 276),label='下载进度',name='staticText',style=17)jdt3 = wx.Gauge(self.panel, range=int(key_num-1), size=(261, 39), pos=(47, 316), name='gauge', style=4)jdt3.SetValue(0)pirce = {}i = 0while len(pirce) < key_num:pirce[randint(0, self.frames_num)] = ii += 1k=1for x in pirce.keys():self.cap.set(CAP_PROP_POS_FRAMES, int(x))being, picture = self.cap.read()if being:imwrite('{}.jpg'.format(x), picture, [IMWRITE_JPEG_QUALITY, 100])jdt3.SetValue(k)bq3.SetLabelText('下载进度:{}/{}'.format(k,int(key_num)))k += 1sourcepath = os.getcwd()path = sourcepath + "/" + str(key_num)isExists = os.path.exists(path)if not isExists:os.makedirs(path)else:passsourcefiles = os.listdir(sourcepath)destinationpath = pathfor file in sourcefiles:if file.endswith('.jpg'):move(os.path.join(sourcepath, file), os.path.join(destinationpath, file))bq3.SetLabelText("下载进度:            当前任务完成")class myApp(wx.App):def OnInit(self):self.frame = Frame()self.frame.Show(True)return Trueif __name__ == '__main__':app = myApp()app.MainLoop()

http://www.ppmy.cn/news/901462.html

相关文章

Java程序猿必备:20个提升代码质量的技巧

1.使用有意义的命名&#xff1a;为类名、变量名、方法名等使用描述性的名称&#xff0c;使代码易于阅读和理解。 示例&#xff1a; // 不推荐&#xff1a; int a;// 推荐&#xff1a; int studentAge;2.遵循编码规范&#xff1a;遵循统一的编码规范&#xff0c;例如Java编码规…

个人发卡系统 - 个人发卡网_ZFAKA-个人发卡网对接支付宝当面付失败解决方案

在个人发卡网对接支付宝当面付的过程中,碰到了几个问题,最终一一解决了 一、提示“支付宝返回数据被篡改。请检查网络是否安全!” 1、有可能是app_id填写错误 如图,appId是下面灰色部分,而不是应用名中的数字 2、ali_public_key设置错误,这里的支付公钥是指的支付宝公钥,…

“深入理解Spring框架:从入门到精通“

标题&#xff1a;深入理解Spring框架&#xff1a;从入门到精通 摘要&#xff1a;本文将从入门级别开始&#xff0c;逐步深入讲解Spring框架的重要概念和核心功能&#xff0c;并通过示例代码展示如何使用Spring框架进行开发。 正文&#xff1a; Spring框架简介 Spring是一个轻…

【crash】浮点除0堆损坏

摘要&#xff1a;工作中遇到一个crash&#xff0c;其现象真实的crash原因差别比较大&#xff0c;和我自身原本了解的只是冲突&#xff0c;因此在本片文档中简单描述下。关键字&#xff1a;除0、IEEE754 1 前情提要 QA测试过程发现一个比较奇怪的crash&#xff0c;只会在特定机…

51单片机的智能交通控制系统【含仿真+程序+演示视频带原理讲解】

51单片机的智能交通控制系统【含仿真程序演示视频带原理讲解】 1、系统概述2、核心功能3、仿真运行及功能演示4、程序代码 1、系统概述 该系统由AT89C51单片机、LED灯组、数码管组成。通过Protues对十字路口红绿灯控制逻辑进行了仿真。 每个路口包含了左转、右转、直行三条车道…

通达信,底峰形(买入信号之一)

OUT:1{从当前柱算起&#xff0c;需要5天的历史数据} AND REF(MAX(O,C),1) LLV(MAX(O,C),3) AND C>O AND REF(C,2) < REF(O,2) AND REF(ABS(C-O),2) > REF(ABS(C-O),1)*1.5{倒数&#xff0c;第二根的柱体很小} AND REF(C,3) > REF(C,2) AND REF(C,4) > REF(C,3)…

第十五章——友元、异常

友元 类并非只能拥有友元函数&#xff0c;也可以将类作为友元。在这种情况下&#xff0c;友元类的所有方法都可以访问原始类的私有成员和保护成员。因此尽管友元被授予从外部访问类的私有部分的权限&#xff0c;但它们并不与面向对象的编程思想相悖&#xff0c;相反提高了共有…

通达信,MACD底背离(买入信号之一)

SHORT:10;{三个可变参数&#xff0c;注意默认参数的修改} MID:7; LONG:20;DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG); DEA:EMA(DIF,MID); MACD:(DIF-DEA)*2;金叉:CROSS(DIF,DEA);周期:BARSLAST(金叉);{取得距离现在天数} 长度:周期1 NODRAW;{算上当天的这根柱} 条件一:C<REF(C,…