qt视频播放器代码(vs下的qt视频播放功能)

一、引言在Python-OpenCV中显示图像时调用的是一个单独的窗口,有时我们需要将这些图像显示在PyQt的图形化界面上,这样就可以将整个图像显示与PyQt图形化界面进行整合。但OpenCV格式的图

一、引言

在Python-OpenCV中显示图像时调用的是一个单独的窗口,有时我们需要将这些图像显示在PyQt的图形化界面上,这样就可以将整个图像显示与PyQt图形化界面进行整合。但OpenCV格式的图像和PyQt格式的图像并不同,这就需要进行转换。

二、背景知识

  1. Python-OpenCV的图像是BGR格式的,而PyQt图像格式是RGB格式的,二者需要转换;
  2. 为了快速转换,图像必须基于内存进行操作;
  3. PyQt的QImage类可以从内存数组构建;
  4. OpenCV可以读取视频图像,使用waitKey可以实现休眠特定时长而不影响系统消息处理。

关于PyQt和OpenCV之间的图像转换请参考《Python-OpenCV中图像颜色空间转换》。

三、案例

下面的案例读取一个视频文件的图像进行显示,如果再叠加一个音频播放的功能,就实现了一个视频播放器。

3.1、设计图形化界面

qt视频播放器代码(vs下的qt视频播放功能)

该图形界面非常简单,包含了一个仅有“ShowImg”的菜单和对应工具栏,一个名为ImgDisp的标签对象用于显示图像(蓝色标记部分)。使用PyUIC生成的界面对象代码如下:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(\"MainWindow\")
MainWindow.resize(625, 430)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName(\"centralwidget\")
self.ImgDisp = QtWidgets.QLabel(self.centralwidget)
self.ImgDisp.setGeometry(QtCore.QRect(0, 0, 54, 12))
self.ImgDisp.setObjectName(\"ImgDisp\")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 625, 17))
self.menubar.setObjectName(\"menubar\")
self.menushowImg = QtWidgets.QMenu(self.menubar)
self.menushowImg.setObjectName(\"menushowImg\")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName(\"statusbar\")
MainWindow.setStatusBar(self.statusbar)
self.toolBar = QtWidgets.QToolBar(MainWindow)
self.toolBar.setObjectName(\"toolBar\")
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
self.actionshowImg = QtWidgets.QAction(MainWindow)
self.actionshowImg.setObjectName(\"actionshowImg\")
self.menushowImg.addAction(self.actionshowImg)
self.menubar.addAction(self.menushowImg.menuAction())
self.toolBar.addAction(self.actionshowImg)

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate(\"MainWindow\", \"MainWindow\"))
self.ImgDisp.setText(_translate(\"MainWindow\", \".\"))
self.menushowImg.setTitle(_translate(\"MainWindow\", \"menu\"))
self.toolBar.setWindowTitle(_translate(\"MainWindow\", \"toolBar\"))
self.actionshowImg.setText(_translate(\"MainWindow\", \"showImg\"))

3.2、主程序

import cv2,sys
from PyQt5 import QtGui,QtWidgets,QtCore
import mainWin

def cvImgtoQtImg(cvImg): #定义opencv图像转PyQt图像的函数
QtImgBuf = cv2.cvtColor(cvImg, cv2.COLOR_BGR2BGRA)

QtImg = QtGui.QImage(QtImgBuf.data, QtImgBuf.shape[1], QtImgBuf.shape[0], QtGui.QImage.Format_RGB32)

return QtImg

class mainwin(QtWidgets.QMainWindow,mainWin.Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.bClose = False

self.actionshowImg.triggered.connect(self.playVideoFile) #建立菜单点击的信号与方法playVideoFile连接

def playVideoFile(self): #播放影片
cap = cv2.VideoCapture(r\'f:videomydream.mp4\') #打开影片
fps = 24
if not cap.isOpened():
print(\"Cannot open Video File\")
exit()

while not self.bClose:
ret, frame = cap.read() #逐帧读取影片
if not ret:
if frame is None:
print(\"The video has end.\")
else:
print(\"Read video error!\")
break

QtImg = cvImgtoQtImg(frame) #将帧数据转换为PyQt图像格式
self.ImgDisp.setPixmap(QtGui.QPixmap.fromImage(QtImg)) #在ImgDisp显示图像
size = QtImg.size()
self.ImgDisp.resize(size)#根据帧大小调整标签大小
self.ImgDisp.show() #刷新界面
cv2.waitKey(int(1000/fps)) #休眠一会,确保每秒播放fps帧

# 完成所有操作后,释放捕获器
cap.release()

if __name__==\'__main__\':
app = QtWidgets.QApplication(sys.argv)
w = mainwin()
w.show()
sys.exit(app.exec_())

注意:

本文的实现方法存在不足,相关完善方案请见《OpenCV-Python图像转换为PyQt图像的变形及花屏问题研究》。

3.3、运行程序

初始界面

qt视频播放器代码(vs下的qt视频播放功能)

点击showImg,开始播放视频:

qt视频播放器代码(vs下的qt视频播放功能)

关于PyQt的使用请参考付费专栏《使用PyQt开发图形界面Python应用》,专栏文件目录《使用PyQt开发图形界面Python应用专栏目录》。

也可以参考免费专栏《PyQt入门知识》,专栏文件目录《使用PyQt进行Python图形界面程序开发文章目录》。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/67336.html

(0)
nan
上一篇 2021-12-16
下一篇 2021-12-16

相关推荐

  • 美菱加湿器质量怎么样(口碑最好的加湿器)

    夏季室内长期开空调,会让室内的空气干燥,生活在空调房里的小伙伴们可能会出现皮肤干燥,起皮的现象。所以,很多人在吹空调的时候会使用加湿器。那么,问题来了,空调房放加湿器管用吗?一、空调房里放加湿器有用吗

    2021-12-16 随笔
    0
  • 关于二次创业的感悟(二次创业心得体会作文怎么写)

    在这个人人都想创业的年代,如何让创业之路坚持走下去,是个最实际,也是最根本的问题。一个创业人,首先不仅要有一腔情怀,也不能一味自信满满分析所谓的趋势和模式,傻傻复制别人的成功模式也大有人在,更有甚者明明高额付着房屋租赁、水电杂费、人员工资、系统建

    2021-12-26 随笔
    0
  • 学习的名人名言推荐(关于学习的名人名言)

    敏而好学,不耻下问。——孔子学如不及,犹恐失之。——孔子黑发不知勤学早,白首方悔读书迟。——颜真卿三思而后行。——孔子三人行,必有我师焉。——孔子好问的人,只做了五分种的愚人;耻于发问的人,终身为愚人。——亚里士多德温故而知新,可以为师

    2021-10-14
    0
  • 全国十大著名教师(名师有哪些)

    据新华社北京9月8日电(记者/王鹏)记者8日从教育部新闻发布会获悉,2021年全国教书育人楷模名单正式公布。河北省石家庄外国语学校教师李红霞等十人获评“全国教书育人楷模”。据了解,这十位全国教书育人楷模,涵盖了高教、职教、中小学、幼教、特教等各级各…

    2022-01-17
    0
  • ps怎样调整五官形状(ps怎么p人脸)

    本次教程主要用到的工具及命令:套索工具,用于选择图层内需要选择的部分收缩图层,将图层按选区内容进行收缩,自动混合图层,将多个图层无违和的混合在一起,整个教程制作起来比较简单,同学们跟着教程来学习一下吧…

    2021-12-02 随笔
    0
  • 教你一招轻松搞定(手机屏幕怎么投影到电视上)

    (来源:小黄鸭头)手机投屏到电视上原来这么简单,不需要任何第三方工具,快来看看,我们每次出去旅游都会拍一些照片和视频,回家后会分享给家人们看,但是每次只用手机看,太不爽了,小编今天教大家把手机的画面投影到电视上,安卓手机和苹果手机都可以,

    2021-11-30 随笔
    0

发表回复

登录后才能评论