Python学习之简易视频播放器

news2025/2/25 18:17:23

先上效果图:

 这个就是用python-pyqt5-opencv做出来的简易视频播放器,主要实现本地视频文件播放、本地摄像头播放和远程摄像头播放三个功能。

核心代码:

def ShowCamera(self, url):
    try:
        if url == None:
            self.cap = cv2.VideoCapture(0)
        else:
            self.cap = cv2.VideoCapture(url)

        print('摄像头是否开启: {}'.format(self.cap.isOpened()))
        if self.cap.isOpened:
            self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
            self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
            self.cap.set(cv2.CAP_PROP_FPS, 25)

            print(self.cap.get(3))
            print(self.cap.get(4))
            print(self.cap.get(5))
            print('开始读取摄像头数据......')

            while(True):
                ret, color_frame = self.cap.read()
                if ret == False:
                    return
                if url == None:
                    color_frame = cv2.flip(color_frame, 1)
                cv2.waitKey(1)
                im = cv2.cvtColor(color_frame, cv2.COLOR_RGB2BGR)
                a = QImage(im.data, im.shape[1], im.shape[0], QImage.Format_RGB888)
                self.setPic(a)

            self.cap.release()
        else:
            print('camera open failed')
    except Exception as e:
        print(str(e))

三类播放使用的都是同一个showcamera()函数,唯一的区别就是函数中的url参数不同。

文件播放:url=文件名

本地相机:url=0

网络串流:url=‘rtsp://……’

除了这个核心代码,打开文件使用的是QFileDialog,打开网络串流使用的是自定义的QinputDialog,两个代码如下:

def OpenFile(self):
    fileName, filetype = QFileDialog.getOpenFileName(self, '选择文件')
    print(fileName, filetype)
    self.ShowCamera(fileName)
def Remote(self):
    input_dialog = QtWidgets.QInputDialog(self)
    input_dialog.setInputMode(QInputDialog.TextInput)
    input_dialog.setWindowTitle('打开网络串流')
    input_dialog.setLabelText('请输入网络串流地址rtsp://')
    input_dialog.setFixedSize(500, 100)
    input_dialog.show()
    if input_dialog.exec_() == input_dialog.Accepted:
        text = input_dialog.textValue()
        if text != '':
            print(text)
            self.ShowCamera(text)
        else:
            print('地址错误或空')

最后,是用Qlabel加载图片的代码:

def setPic(self, image):
    self.label.setPixmap(QPixmap.fromImage(image))

剩下的就是UI界面的定义了,代码就不贴了,想要完整的全部代码,可以在CSDN下载:

https://download.csdn.net/download/hydekong/87789206

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

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

相关文章

别再犯这些错误,WEB自动化测试实施与误区

目录 前言: 一、WEB自动化测试的实施 1. 确定测试框架 2. 定义测试用例 3. 配置测试环境 4. 执行测试用例 二、WEB自动化测试的误区 1. 盲目追求全覆盖 2. 忽视测试代码的质量 3. 忽略测试环境的差异性 4. 缺乏测试结果分析和问题处理 5. 忽视测试人员的…

移动安全逆向实战(一)

小杂谈 搞了差不多两年移动安全发现多动手才能学到新东西,故此推出app逆向实战系列用于记录破解各个app的安全防护,以此勉励。 一些括号内词句读者自动脑补表情包,狗头保命[doge] 正文 frida反调试 将某8样本app塞进jadx查壳,数…

Agitek安泰测试与您相约第5届中国国际计量测试技术与设备博览会

展会时间:2023年5月17日至19日 展会地点:上海世博展览馆(上海.浦东) 展位号:2号馆423 2023年5月17日至19日,第5届中国国际计量测试技术与设备博览会将在上海世博展览馆举办,西安安泰测试Agite…

硬科技,创未来!第十五届深创赛福田预选赛-华秋第九届硬创大赛正式启幕

自2015年首次启动至今,由深圳华秋电子有限公司主办的“华秋中国硬件创新创客大赛”不断提升,赛事范围覆盖华南、华东、华北三大地区,累计影响超过45万工程师群体,吸引了35000多名硬创先锋报名参与。 2023年华秋第九届中国硬件创新…

​文生视频: 任务、挑战及现状

示例视频由 ModelScope 生成。 最近生成模型方向的进展如排山倒海,令人目不暇接,而文生视频将是这一连串进展的下一波。尽管大家很容易从字面上理解文生视频的意思,但它其实是一项相当新的计算机视觉任务,其要求是根据文本描述生成…

润秋商业案例分析,带你了解商业背后的秘密~~

商润秋商业案例分析,带你了解商业背后的秘密~~业模式的好坏直接奠定了公司未来的发展和当前的盈利能力。确实我们一个好的商业模式,往往可以让业务更稳定,发展更快。但一个好的商业模式必须满足几个条件: 1.帮助解决用户的流量问…

【C++】类和对象详解(2)

【C】类和对象(1) 文章目录 一、类的6个默认成员函数1.1 构造函数1.2 析构函数1.3 拷贝构造函数1.4 赋值运算符重载1.5 取地址及const取地址操作符重载const成员 一、类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真…

吴恩达OpenAI基于ChatGPT的Prompt开发教程

吴恩达OpenAI基于ChatGPT的Prompt开发教程 1.如何给出清晰具体的提示 1.1大模型分类: Base LLM基础大语言模型来源于预训练模型:用已有单词推测下一个单词。 Instruction Tuned LLM指令大语言模型:用人类反馈微调大语言模型优化回答。 当我们…

AMS启动报错 hbase-ams-master.pid doesn‘t exist after starting of the component

感谢点赞和关注 ,每天进步一点点!加油! 目录 ​ 一、问题描述 二、解决办法 一、问题描述 Ambari Metrics, Metrics Collector 启动报错如下: stderr: Traceback (most recent call last):File "/var/lib/ambari-agen…

网站被黑后的紧急处理恢复正常步骤是什么?

随着时代的发展网站使用的频率是逐步增加。然而,随着互联网技术的不断进步,网站安全问题也引起了广泛关注。其中,最严重的问题是网站被黑客攻击。那么,何谓网站被黑?它可能会给企业和用户带来哪些风险? 一、…

屏幕录像工具哪个好?这3款录屏工具就很不错!

案例:有没有好用的录屏工具分享? 【每次对电脑屏幕进行录制都要花费我很多时间,录制的内容质量还差,真是事倍功半。听说使用好的录屏工具可以提高录屏的效率,那录屏软件哪款好用?在线蹲一款!】…

【AIGC】阿里云服务器配置stable-diffusion-webui

阿里云服务器部署SD全流程, 正在更新!!! 购买阿里云实例开始部署开始运行安装插件中文插件从civitai上下载模型, 加载并利用其绘图 购买阿里云实例 我感觉应该不止我一个,点进阿里云的官网后,发现里面的内容太多&…

【爬虫逆向】Python加密算法大揭秘:应用场景与实现技巧

前言:​ 在我们进行js逆向的时候. 总会遇见一些我们人类无法直接能理解的东西出现. 此时你看到的大多数是被加密过的密文.今天在这里教大家各种加密的逻辑。 Python助学大礼包点击跳转获取 目录 一、一切从MD5开始二、URLEncode和Base64三、对称加密四、非对称加密…

Neo4j之APOC安装与使用样例

1 APOC简介 APOC即Awesome Procedures on Cypher ,是 Neo4j 最大和最广泛使用的扩展库,是Neo4j过程和函数的标准实用程序库。它包括 450 多个标准程序,提供实用程序、转换、图形更新等功能。它们得到很好的支持,并且很容易作为单…

超详细canal入门

我们都知道一个系统最重要的是数据,数据是保存在数据库里。但是很多时候不单止要保存在数据库中,还要同步保存到Elastic Search、HBase、Redis等等 一、什么是canal 我们先看官网的介绍 canal,译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供 增量…

MATLAB绘制动画(三)电影动画

就像是电影拍摄一样,MATLAB存储一系列图形,并将这些图像组成一个特殊的矩阵,由函数movie()播放 Z peaks; figure(Renderer,zbuffer); surfc(Z); axis tight manual; set(gca,NextPlot,replaceChildren); for j 1:20surfc(sin(2*pi*j/20)*…

【微信小程序】阶段开发总结

【微信小程序】阶段开发总结 《工欲善其事,必先利其器》 一、页面代码量过多的解决方案 最近开发的小程序页面里面包含非常多的代码,而且一个页面里面分为了很多步骤,根据不同的进度去显示不同的填写内容,因此,首先我…

Jenkins安装详细教程

Jenkins简介 Jenkins是一个开源的软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 1.持续的软件版本发布/测试项目 2.监控外部调用执行的工作 最近…

Redis 下载安装

一、redis介绍 redis官网地址:http://www.redis.cn/ Redis是当前比较热门的NoSQL系统之一它是一个开源的、使用ANSI C语言编写的key-value存储系统(区别于MySQL的二维表格形式存储)和Memcache类似,但很大程度补偿了Memcache的不…

k8s系列-前端镜像打包集成Jenkin spush到仓库

1.General-->源码管理-->构建触发器-->构建环境-->构建-->构建后操作 General-->源码管理-->构建触发器-->构建环境-->构建-->构建后操作 General-->源码管理-->构建触发器-->构建环境-->构建-->构建后操作 General-->源码管…