视频帧率计算器,可以计算视频的帧率、帧数、时间长度,
还可以播放视频,计算视频清晰度,计算最清晰帧,保存最清晰帧。
其中计算视频清晰度的方法有三种,分别是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学习笔记——工具视频帧率计算器】相关推荐

  1. python爬虫之b站视频下载(python学习笔记)

    b站视频爬取(python学习笔记) 亲爱的b站自从在2020年3月23日将av号改为BV号后,之前的很多爬虫已经不能用了,暂时没看懂这操作的意义何在,反而一大串大小写英文字母加数字的BV号让人很难记 ...

  2. OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并

    OpenCV之Python学习笔记 一直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看到一本国外的新书< ...

  3. Python学习笔记:web开发1

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. OpenCV之Python学习笔记

    RSS订阅 登陆 注册 原文链接地址:http://www.itozi.net/19477.html OpenCV之Python学习笔记 ITOZI 发布于 2015-08-06 分类:OpenSta ...

  5. Python学习笔记:第十站 水晶球不调用不动

    Python学习笔记 文章目录 Python学习笔记 第十站 水晶球不调用不动 1. 函数的创建和调用 2. 函数的参数传递 3. 函数的返回值 4. 函数的参数定义 5. 变量的作用域 6. 递归函 ...

  6. Python学习笔记:第二站 七十二变

    Python学习笔记 文章目录 Python学习笔记 第二站 七十二变 1. 二进制与字符编码 2. Python中的标识符与保留字 3. Python中的变量 4.Python中的数据类型 5. P ...

  7. Python学习笔记(3)---B站黑马程序员

    Python学习笔记(1)-B站黑马程序员 Python学习笔记(2)-B站黑马程序员 Python学习笔记(3)-B站黑马程序员 文章目录 五.项目实战--飞机大战 001-Pycharm中安装py ...

  8. Python学习笔记:第十五站 大宝藏

    Python学习笔记 文章目录 Python学习笔记 第十五站 大宝藏 1. 编码格式介绍 2. 文件的读写原理 3. 文件读写操作 4. 文件对象常用的方法 5. with语句(上下文管理器) 6. ...

  9. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

最新文章

  1. Linux系统中fflush,sync,syncfs,fdatasync,fsync的比较
  2. excel公式:定位单元格
  3. 全局处理ajax请求时session超时
  4. 压缩感知高斯测量矩阵matlab,浅谈压缩感知(十七):测量矩阵之有限等距常数RIC的计算...
  5. ASP.NET Core 2.0 依赖注入
  6. js hover图片放大不遮挡_CSS3+JS 实现放大镜
  7. Response.Redirect 编码的问题
  8. 基于jQuery/zepto的单页应用(SPA)搭建方案
  9. 如何解决 错误code signing is required for product type 'xxxxx' in SDK 'iOS 8.2'
  10. abp vnext中swagger使用小结
  11. oracle用户sde老是锁定,关于ArcGIS10.0版本的SDE密码修改,账户锁定,SDE服务启动又停止等问题的解决...
  12. Python版本的查看
  13. 如何批量隔行删除Excel行
  14. ABYY FineReader PDF软件最新15个人​版安装下载步骤教程
  15. 《德鲁克管理思想精要》读书笔记2 - 企业的宗旨、目标
  16. vue 移动端和web端实现文件的点击预览 而非下载
  17. svg 画圆 画椭圆 画直线 画折线
  18. mysql server 安装及配置_mysql server的安装和配置
  19. 九、android的ListView实现数据列表展示
  20. 数组排序(O(n的二次方))

热门文章

  1. 英语文字转语音的软件有哪些?推荐三款文字转语音真人发声软件
  2. matlab实时编辑器,关于MATLAB实时编辑器的性能分析和应用
  3. php锻炼逻辑的问题,锻炼逻辑思维能力的:5道高难度逻辑思维训练题
  4. 其他计算机如何联网,局域网怎么连接其他电脑上网
  5. Linux-安装ifconfig
  6. 【解决】nvm报错:exit status 1: ��û���㹻��Ȩ��ִ�д˲�����
  7. 使用vagrant工具来管理和创建虚拟机
  8. 如何搭建Git服务器
  9. devc 能优化吗_C/C++集成开发环境Dev-C++怎么样?
  10. 用C语言实现简单的计算器