基于OpenCV和PyQt5的跳远成果展示程序

news2024/11/24 2:28:58

基于OpenCV和PyQt5的跳远成果展示程序

近年来,体育运动越来越受到人们的关注,其中跳远是一项备受瞩目的运动项目。为了更好地展示运动员的跳远成果,本文将介绍一种基于OpenCV和PyQt5的跳远成果展示程序实现方法。

本文的跳远成果展示程序主要包括两个部分:一是通过读取视频中的图像,计算运动员的跳跃距离;二是在界面上显示运动员跳跃的视频和跳跃距离结果。下面我们将分别介绍这两个部分的实现方法。

一、计算跳跃距离

1.获取背景图像

程序最开始需要获取跳跃场地的背景图像。为了方便计算跳跃距离,我们需要将背景图像转换为灰度图像,并进行高斯模糊处理。

self.cap = cv2.VideoCapture('跳远3.mp4')
_, self.bg_frame = self.cap.read()
self.bg_frame = cv2.cvtColor(self.bg_frame, cv2.COLOR_BGR2GRAY)
self.bg_frame = cv2.GaussianBlur(self.bg_frame, (21, 21), 0)

2.读取视频帧并计算跳跃距离

程序在读取每一帧视频图像时,需要将其转换为灰度图像,并进行高斯模糊处理。接着,通过背景减除和二值化处理来得到前景图像,并在前景图像中查找最大的轮廓。最后,根据最大轮廓的椭圆长轴长度来计算跳跃距离。

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (21, 21), 0)
# 背景减除
diff = cv2.absdiff(self.bg_frame, gray)
thresh = cv2.threshold(diff, 25, 255, cv2.THRESH_BINARY)[1]
# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓并计算跳跃距离
if len(contours) > 0:
    c = max(contours, key=cv2.contourArea)
    cv2.drawContours(frame, [c], 0, (0, 255, 0), 2)
    (x, y), radius = cv2.minEnclosingCircle(c)
    cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 0), 2)
    if len(c) > 4:
        ellipse = cv2.fitEllipse(c)
        cv2.ellipse(frame, ellipse, (0, 255, 0), 2)
        self.distance = ellipse[1][0] * 0.025

二、界面显示

程序的界面显示主要通过PyQt5库来实现。我们在界面上添加一个QLabel用于显示跳跃视频,并添加另一个QLabel用于显示跳跃距离结果。同时,我们还需要添加一个定时器来定时刷新跳跃视频和跳跃距离结果。

class Main(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.video = Video()
        self.initUI()

    def initUI(self):
        self.setGeometry(100, 100, 1200, 700)
        self.setWindowTitle('Jumping Distance')

        # 添加用于显示视频的QLabel
        self.video_label = QtWidgets.QLabel(self)
        self.video_label.setGeometry(QtCore.QRect(100, 50, 1000, 600))
        self.video_label.setFrameShape(QtWidgets.QFrame.Box)

        # 添加用于显示跳跃距离的QLabel
        self.result_label = QtWidgets.QLabel(self)
        self.result_label.setGeometry(QtCore.QRect(275, 30, 300, 100))
        font = QtGui.QFont()
        font.setPointSize(20)
        font.setBold(True)
        font.setWeight(75)
        self.result_label.setFont(font)
        self.result_label.setAlignment(QtCore.Qt.AlignCenter)
        self.result_label.setObjectName("result_label")

        # 添加一个定时器
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.updateFrame)
        self.timer.start(1)

在每次定时器触发时,我们将调用Video类的readFrame方法来获取视频图像,并将其显示在QLabel上。同时,我们还需要更新跳跃距离结果,并在QLabel上显示。

def updateFrame(self):
    frame = self.video.readFrame()
    if frame is not None:
        # 将Qt格式的图像显示在QLabel上
        self.video_label.setPixmap(QtGui.QPixmap.fromImage(frame))

        # 在self.result_label上显示跳跃距离结果
        self.result_label.setText("跳跃距离:%.2f 米" % self.video.distance)

通过上述方法,我们就可以实现跳远成果展示程序的功能。在使用程序时,我们只需要将视频文件与代码文件放置在同一个目录下,并运行程序即可。在程序运行过程中,我们可以实时地看到运动员跳跃的视频和跳跃距离结果,从而更好地展示运动员的跳跃成果。

三.效果展示

在这里插入图片描述

总结

本文介绍了一种基于Python和OpenCV库的跳远成果展示程序实现方法。通过计算视频中运动员的跳跃距离,并在界面上实时显示跳跃视频和跳跃距离结果,可以更好地展示运动员的跳远成果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/559081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的校园办公管理系统的设计与实现(源码完整)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据你想解决的问题,今天给…

【TES641】基于VU13P FPGA的4路FMC接口基带信号处理平台

板卡概述 TES641是一款基于Virtex UltraScale系列FPGA的高性能4路FMC接口基带信号处理平台,该平台采用1片Xilinx的Virtex UltraScale系列FPGA XCVU13P作为信号实时处理单元,该板卡具有4个FMC子卡接口(其中有2个为FMC接口)&#xf…

Sui如何进行独立审计

Sui及其生态项目的第三方审计对于网络的安全至关重要。 类似于Sui这样的L1区块链必须使用多重有效的措施,来确保项目保持尽可能高的安全级别。Sui流程中的一个关键环节就是使用第三方安全审计。了解Sui的安全状态及其维护方式对整个社区来说很重要,因此…

【JavaSE】Java基础语法(二)

文章目录 1. ⛄类型转换1.1 🪂🪂隐式转换1.2 🪂🪂强制转换 2. ⛄运算符2.1 🪂🪂算术运算符2.1.1 算术运算符2.1.2 字符的“”操作2.1.3 字符串的“”操作2.1.4 数值拆分 2.2 🪂🪂自增…

SQL注入 - Part 2

SQL注入 - Part 2 1.sql注入自动化工具--sqlmap配置环境变量/快捷方式一些sqlmap的常用语句前置SQL知识batch批量注入 2.sql注入靶场——sqlilabs3.布尔盲注4.基于时间的盲注5.基于报错的注入总结 1.sql注入自动化工具–sqlmap 配置环境变量/快捷方式 最终效果: …

数据高效转储,生产轻松支撑

在使用WINDOWS或智能手机的时候,经常会遇到存储空间不足的问题,鲜有人会打开文件管理系统自己逐个清理,不仅因为底层的系统文件繁多操作耗时,更有其操作专业度高、风险高的问题。这时我们往往会求助各种各样的清理大师&#xff0c…

2个月拿到华为offer,身为00后的我拿30K没问题吧?

背景介绍 美本计算机专业,代码能力一般,之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发,第二份实习由于大三回国的时间比较短,于是找的实习是在一家初创公司里面做全栈。 本人面…

网络安全CTF工具合集

各种在线工具以及工具整合 CTF资源库|CTF工具下载|CTF工具包|CTF工具集合 逆向工程: GDB – http://www.gnu.org/software/gdb/download/ IDA Pro – Download center Immunity Debugger – http://debugger.immunityinc.com/ OllyDbg – OllyDbg v1.10 radare2 – radare Hop…

MySQL基于成本的优化

MySQL的成本是什么?MySQL在执行一个查询的时候,其实是有多种不同的方案的,但是最终会选择一种成本比较低的方案,那么这个成本都体现在什么地方?如何计算? MySQL的成本 I/O成本 : 把数据从磁盘…

Python 萌新 - 花10分钟学爬虫

前言 Python 新手入门很多时候都会写个爬虫练手,本教程使用 Scrapy 框架,帮你简单快速实现爬虫,并将数据保存至数据库。在机器学习中数据挖掘也是十分重要的,我的数据科学老师曾经说过,好算法不如好数据。 Python助学…

理光打印机连接电脑后不打印的原因及解决方法

理光打印机在使用时,可能会出现正常连接上理光打印机却没有反应的情况,出现无法打印的情况,下面,驱动人生为大家带来理光打印机连接后不打印的解决方案。 驱动人生分析,一般遇到理光打印机连接后不打印的情况&#xf…

第一行代码 第十一章 基于位置的服务

第11章 基于位置的服务 在本章中,我们将要学习一些全新的Android技术,这些技术有别于传统的PC或Web领域的应用技术,是只有在移动设备上才能实现的。 基于位置的服务(Location Based Service)。由于移动设备相比于电脑…

Prompt Engineering | 编写prompt的原则与策略

😄 为了更好地与大模型(e.g. chatgpt)更好的交流,一起来学习如何写prompt吧!😄 文章目录 1、简介2、编写prompt的原则与策略2.1、编写清晰、具体的指令2.1.1、策略一:使用分隔符清晰地表示输入的…

js 解析map (处理后端返回对象拼接)

返回的数据 需要的展示效果 解析如下: { title: ‘销售属性’, align: ‘left’, dataIndex: ‘xsshuxing’, width: 200, render(value, record) { let keyValue ‘’; { for (var key in record.otherAttr) { console.log(‘属性:’ key ‘,值&…

EIS-Net

我们提出了一种新的领域泛化框架(称为EISNet),该框架利用来自多源领域图像的外在关系监督和内在自我监督学习,学习如何同时在不同领域中进行泛化。 具体而言,我们采用多任务学习范式,通过特征嵌入来构建我…

AI智慧安监视频平台EasyCVR视频出现不能播放的情况排查与解决

EasyCVR基于云边端协同,可支持海量视频的轻量化接入与汇聚管理。平台兼容性强、拓展度高,可提供视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码、平台级联等功能。 有用户反…

如何动态生成列表视图?

UE5 插件开发指南 前言0 什么是列表视图?1 如何动态生成?1.0 指定ListView生成的条目前言 这里将其拆分成两个问题来分析: (1)什么是列表视图? (2)如何动态生成? 0 什么是列表视图? 列表视图就是用来展示一系列对象的UI列表,在UE编辑器的UserWidget设计窗口中可以找到…

linux 安装 ffmpeg

linux 安装 ffmpeg windows上安装,直接下载压缩包解压。linux安装,找了半天各种技术文章,说最好编译安装,按照步骤安装编译环境编译成功了,但是使用的时候总要安装各种外部库,转码转不了等等问题...... 最…

城市生命线监测系统包括哪些内容?

城市排水、供水、燃气、供热、桥梁、隧道、综合管廊等基础设施是城市正常运转的基石,被称为“城市生命线”。城市生命线一旦出现故障或事故,将会给城市和居民带来巨大的经济和生活损失。通过对城市生命线的实时监测和预警,可以及时发现潜在的…

第十五届“中国电机工程学会杯”数学建模竞赛

第十五届电工杯5月26号就要开始啦,今天给大家回顾第十四届全国大学生电工数学建模竞赛A题,主要从赛题重述和问题分析与代码实战展开。第十五届全国大学生电工数学建模竞赛已经开始报名了哦,后续我也会分享对应的建模思路哦,大家记…