tft每日頭條

 > 科技

 > python的qt界面

python的qt界面

科技 更新时间:2024-06-29 17:47:46

在做計算機視覺項目時,經常需要打開和顯示監控視頻畫面,對畫面進行分析處理。使用OpenCV打開攝像頭顯示視頻畫面,視頻可以參看:1.3 OpenCV打開本地攝像頭并顯示視頻畫面。

本文主要實現在PyQt窗體上顯示監控視頻畫面。視頻可以參看:8.2 Python-PyQt:窗體上顯示視頻圖像

一、使用Qt Designer創建窗體

窗體主要兩個元素:一個 Label 用來顯示圖像,一個Push Button 用來打開視頻頭。

窗體自适應布局,保存窗體文件:yolodet.ui,XML格式保存的。

要在Python中使用這個窗體文件,還需要把yolodet.ui文件編譯生成.py文件。在vscode中配置好PyQt後,打開ui文件的右鍵菜單,很方便把ui文件轉換成py文件。

python的qt界面(118.PythonPyQt窗體上顯示監控畫面)1

右鍵菜單

二、實現代碼

import sys import cv2 from PyQt5 import QtCore,QtGui,QtWidgets from Ui_yolodet import Ui_MainWindow class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) self.btnopen.clicked.connect(self.Open) def Open(self): cap=cv2.VideoCapture(0) while cap.isOpened(): ret,frame=cap.read() #img=QtGui.QImage(frame.data,frame.shape[1],frame.shape[0],QtGui.QImage.Format_BGR888) #重載修複圖像顯示變形問題 img = QtGui.QImage(frame.data, frame.shape[1], frame.shape[0], frame.shape[1] * 3,QtGui.QImage.Format_BGR888) #設置label高度和寬度 self.lblimg.setFixedSize(frame.shape[1],frame.shape[0]) self.lblimg.setPixmap(QtGui.QPixmap.fromImage(img)) self.lblimg.setScaledContents(True) #自适應大小 QtWidgets.QApplication.processEvents() if __name__ == '__main__': app=QtWidgets.QApplication(sys.argv) mywin=MainWindow() mywin.setObjectName("Yolo3 Detect") mywin.show() sys.exit(app.exec_())

說明:

1、正常情況,使用下面代碼來生成QImage,可以顯示正常圖像,但有時會發現圖像會扭曲變形。

img=QtGui.QImage(frame.data,frame.shape[1],frame.shape[0],QtGui.QImage.Format_BGR888)

解決辦法:改成如下代碼。原因:QImage每行是按照sizeof(int)對齊的,如果不明确指定最後一個參數,即行字節數,則圖像會歪斜。增加第三個參數:frame.shape[1] * 3,

img = QtGui.QImage(frame.data, frame.shape[1], frame.shape[0], frame.shape[1] * 3,QtGui.QImage.Format_BGR888)

2、根據圖像的大小來設定Label的大小,以防止視頻畫面變形

#設置label高度和寬度 self.lblimg.setFixedSize(frame.shape[1],frame.shape[0])

三、運行效果

python的qt界面(118.PythonPyQt窗體上顯示監控畫面)2

運行效果:畫面顯示

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved