【python学习笔记——工具视频帧率计算器】
视频帧率计算器,可以计算视频的帧率、帧数、时间长度,
还可以播放视频,计算视频清晰度,计算最清晰帧,保存最清晰帧。
其中计算视频清晰度的方法有三种,分别是Laplacian算子、Sobel算子和平均梯度。
- 一、Laplacce算子
是一种各向同性算子,二阶微分算子,在只关心边缘的位置而不考虑其周围的象素灰度差值时比较合适。Laplace算子对孤立象素的响应要比对边缘或线的响应要更强烈
Laplacian 梯度函数
利用Laplacian算子对图像进行模板卷积得到图像的高频分量,然后可以对图像的高频分量求和,用高频分量和作为图像的清晰度评价标准。
对于一个M×N像素的图像,每个像素的亮度为g(x,y),进行滤波模板卷积后每个像素点值为z(x,y)。则图像清晰度评价函数:
Laplacian算子:z(x,y)=g(x-1,y)+g(x+1,y)+g(x,y-1)+g(x,y+1)一4g(x,y)
梯度算子为水平方向和垂直方向两个,高通滤波算子只有一个
二、Sobel算子
判断图像清晰度本质是梯度运算。 索贝尔算子(Sobeloperator)主要用于获得数字图像的一阶梯度,常见的应用和物理意义是边缘检测。 在技术上,它是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值,主要用于获得数字图像的一阶梯度
三、平均梯度
平均梯度(meangradient):指图像的边界或影线两侧附近灰度有明显差异,即灰度变化率大,这种变化率的大小可用来表示图像清晰度。它反映了图像微小细节反差变化的速率,即图像多维方向上密度变化的速率,表征图像的相对清晰程度。
界面如下:
"""
# -*- coding: utf-8 -*-
Created on 03 27 15:45:00 2023
@Author: yuxi
视频帧率计算器,可以计算视频的帧率、帧数、时间长度,
还可以播放视频,计算视频清晰度,计算最清晰帧,保存最清晰帧。
其中计算视频清晰度的方法有三种,分别是Laplacian算子、Sobel算子和平均梯度。Attempt Change"""
import cv2
import tkinter as tk
from tkinter import filedialog
import numpy as npclass FrameRateCalculator:def __init__(self, master):self.master = mastermaster.title("Frame Rate Calculator")master.geometry("800x600")self.label = tk.Label(master, text="选择视频文件路径:", font=("Arial", 14))self.label.pack(pady=10)self.entry = tk.Entry(master, font=("Arial", 14))self.entry.pack(pady=10)self.button = tk.Button(master, text="选择视频文件", font=("Arial", 14), command=self.browse_file)self.button.pack(pady=10)self.result_label = tk.Label(master, text="", font=("Arial", 14))self.result_label.pack(pady=10)self.calculate_button = tk.Button(master, text="计算", font=("Arial", 14), command=self.calculate)self.calculate_button.pack(pady=10)self.play_button = tk.Button(master, text="播放视频", font=("Arial", 14), command=self.play_video)self.play_button.pack(pady=10)self.clarity_button = tk.Button(master, text="计算最清晰帧", font=("Arial", 14), command=self.calculate_clarity)self.clarity_button.pack(pady=10)self.max_clarity_label = tk.Label(master, text="", font=("Arial", 14))self.max_clarity_label.pack(pady=10)self.max_clarity_frame_label = tk.Label(master, text="", font=("Arial", 14))self.max_clarity_frame_label.pack(pady=10)self.save_button = tk.Button(master, text="保存最清晰帧", font=("Arial", 14), command=self.save_max_clarity_frame)self.save_button.pack(pady=10)# 将所有按钮和标签的背景颜色、前景颜色和字体设置为红色、白色和Arial 14# self.button.config(bg='red', fg='white', font=("Arial", 14))# self.calculate_button.config(bg='red', fg='white', font=("Arial", 14))# self.play_button.config(bg='red', fg='white', font=("Arial", 14))# self.clarity_button.config(bg='red', fg='white', font=("Arial", 14))# self.save_button.config(bg='red', fg='white', font=("Arial", 14))# self.label.config(bg='red', fg='white', font=("Arial", 14))# self.entry.config(bg='red', fg='white', font=("Arial", 14))# self.result_label.config(bg='red', fg='white', font=("Arial", 14))# self.max_clarity_label.config(bg='red', fg='white', font=("Arial", 14))# self.max_clarity_frame_label.config(bg='red', fg='white', font=("Arial", 14)) self.master.mainloop()def browse_file(self):file_path = filedialog.askopenfilename()self.entry.delete(0, tk.END)self.entry.insert(0, file_path)def calculate(self):video_path = self.entry.get()cap = cv2.VideoCapture(video_path)fps = cap.get(cv2.CAP_PROP_FPS)frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))duration = frame_count / fpsself.result_label.config(text="帧率: {:.2f} 帧数: {} 时间长度: {:.2f}秒".format(fps, frame_count, duration), font=("Arial", 14))def play_video(self):video_path = self.entry.get()cap = cv2.VideoCapture(video_path)cv2.namedWindow('frame', cv2.WINDOW_NORMAL)cv2.resizeWindow('frame', 800, 500)while(cap.isOpened()):ret, frame = cap.read()if ret == True:cv2.imshow('frame',frame)if cv2.waitKey(25) & 0xFF == ord('q'):breakelse:breakcap.release()cv2.destroyAllWindows()# 计算视频清晰度def calculate_clarity(self):video_path = self.entry.get() # 获取视频路径cap = cv2.VideoCapture(video_path) # 打开视频max_clarity = 0 # 初始化最大清晰度max_frame = None # 初始化最清晰帧max_frame_num = 0 # 初始化最清晰帧的帧数while(cap.isOpened()): # 循环读取视频帧ret, frame = cap.read() # 读取视频帧if ret == True:#clarity = cv2.Laplacian(frame, cv2.CV_64F).var() # 计算帧的清晰度# 计算帧的清晰度'''sobelx = cv2.Sobel(frame, cv2.CV_64F, 1, 0, ksize=5)sobely = cv2.Sobel(frame, cv2.CV_64F, 0, 1, ksize=5)sobel = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)clarity = sobel.var() '''# 计算帧的清晰度sobelx = cv2.Sobel(frame, cv2.CV_64F, 1, 0, ksize=3)sobely = cv2.Sobel(frame, cv2.CV_64F, 0, 1, ksize=3)mean_gradient = np.mean(np.sqrt(sobelx**2 + sobely**2))clarity = mean_gradientif clarity > max_clarity: # 如果当前帧的清晰度大于最大清晰度max_clarity = clarity # 更新最大清晰度max_frame = frame # 更新最清晰帧max_frame_num = int(cap.get(cv2.CAP_PROP_POS_FRAMES)) # 更新最清晰帧的帧数else:breakcap.release() # 释放视频self.max_clarity_label.config(text="最清晰帧的清晰度: {:.2f}".format(max_clarity), font=("Arial", 14))self.max_clarity_frame_label.config(text="最清晰帧的信息: 帧数{}".format(max_frame_num), font=("Arial", 14))self.max_frame = max_framedef save_max_clarity_frame(self):file_path = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPEG Image", "*.jpg"), ("PNG Image", "*.png"), ("BMP Image", "*.bmp"),("TIF Image", "*.tif")])if file_path:cv2.imwrite(file_path, self.max_frame)FrameRateCalculator(tk.Tk())
视频帧率计算器exe文件:https://download.csdn.net/download/YUelite/87617813
【python学习笔记——工具视频帧率计算器】相关推荐
- python爬虫之b站视频下载(python学习笔记)
b站视频爬取(python学习笔记) 亲爱的b站自从在2020年3月23日将av号改为BV号后,之前的很多爬虫已经不能用了,暂时没看懂这操作的意义何在,反而一大串大小写英文字母加数字的BV号让人很难记 ...
- OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并
OpenCV之Python学习笔记 一直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看到一本国外的新书< ...
- Python学习笔记:web开发1
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- OpenCV之Python学习笔记
RSS订阅 登陆 注册 原文链接地址:http://www.itozi.net/19477.html OpenCV之Python学习笔记 ITOZI 发布于 2015-08-06 分类:OpenSta ...
- Python学习笔记:第十站 水晶球不调用不动
Python学习笔记 文章目录 Python学习笔记 第十站 水晶球不调用不动 1. 函数的创建和调用 2. 函数的参数传递 3. 函数的返回值 4. 函数的参数定义 5. 变量的作用域 6. 递归函 ...
- Python学习笔记:第二站 七十二变
Python学习笔记 文章目录 Python学习笔记 第二站 七十二变 1. 二进制与字符编码 2. Python中的标识符与保留字 3. Python中的变量 4.Python中的数据类型 5. P ...
- Python学习笔记(3)---B站黑马程序员
Python学习笔记(1)-B站黑马程序员 Python学习笔记(2)-B站黑马程序员 Python学习笔记(3)-B站黑马程序员 文章目录 五.项目实战--飞机大战 001-Pycharm中安装py ...
- Python学习笔记:第十五站 大宝藏
Python学习笔记 文章目录 Python学习笔记 第十五站 大宝藏 1. 编码格式介绍 2. 文件的读写原理 3. 文件读写操作 4. 文件对象常用的方法 5. with语句(上下文管理器) 6. ...
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
最新文章
- Linux系统中fflush,sync,syncfs,fdatasync,fsync的比较
- excel公式:定位单元格
- 全局处理ajax请求时session超时
- 压缩感知高斯测量矩阵matlab,浅谈压缩感知(十七):测量矩阵之有限等距常数RIC的计算...
- ASP.NET Core 2.0 依赖注入
- js hover图片放大不遮挡_CSS3+JS 实现放大镜
- Response.Redirect 编码的问题
- 基于jQuery/zepto的单页应用(SPA)搭建方案
- 如何解决 错误code signing is required for product type 'xxxxx' in SDK 'iOS 8.2'
- abp vnext中swagger使用小结
- oracle用户sde老是锁定,关于ArcGIS10.0版本的SDE密码修改,账户锁定,SDE服务启动又停止等问题的解决...
- Python版本的查看
- 如何批量隔行删除Excel行
- ABYY FineReader PDF软件最新15个人​版安装下载步骤教程
- 《德鲁克管理思想精要》读书笔记2 - 企业的宗旨、目标
- vue 移动端和web端实现文件的点击预览 而非下载
- svg 画圆 画椭圆 画直线 画折线
- mysql server 安装及配置_mysql server的安装和配置
- 九、android的ListView实现数据列表展示
- 数组排序(O(n的二次方))
热门文章
- 英语文字转语音的软件有哪些?推荐三款文字转语音真人发声软件
- matlab实时编辑器,关于MATLAB实时编辑器的性能分析和应用
- php锻炼逻辑的问题,锻炼逻辑思维能力的:5道高难度逻辑思维训练题
- 其他计算机如何联网,局域网怎么连接其他电脑上网
- Linux-安装ifconfig
- 【解决】nvm报错:exit status 1: ��û���㹻��Ȩ��ִ�д˲�����
- 使用vagrant工具来管理和创建虚拟机
- 如何搭建Git服务器
- devc 能优化吗_C/C++集成开发环境Dev-C++怎么样?
- 用C语言实现简单的计算器