1. 程式人生 > >python+opencv+pyqt5控制攝像頭在Qlabel上顯示

python+opencv+pyqt5控制攝像頭在Qlabel上顯示

import cv2
import numpy as numpy
from PIL import *
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from threading import *
#一大堆引用,亂七八糟,都要用到
#需要繼承QWidget,初始化窗體
class initform(QWidget):
    def __init__(self):
        super().__init__()
        return self.initUI()

    
def initUI(self): #設定視窗左上邊距,寬度高度 self.setGeometry(300,300,800,600) #設定窗體標題 self.setWindowTitle("myui") # self.layout=QGridLayout(self) #設定lable文字內容 self.lable=QLabel("iamlable",self) # self.lable.move(0,0) #label的對其方式,為左上對其 self.lable.setAlignment(Qt.AlignTop) self.lable.setAlignment(Qt.AlignLeft)
#設定lable的大小 self.lable.setGeometry(0,0,800,600) # self.lable.size(800,600) self.lable.setScaledContents(True) # self.lable.setWordWrap(True) # self.lable.setFixedSize(800,600) # self.lable.setFixedWidth(800) # self.lable.setFixedHeight(600) #lable加入窗體 #
self.layout.addWidget(self.lable) # self.lable.setAutoFillBackground(True) # self.lable.alignment(Qt.AlignCenter) # pe=QPalette() # pe.setColor(QPalette.windowText,Qt.blue) # pe.setColor(QPalette.window,Qt.red) # self.lable.setPalette(pe) # self.lable.move(0,0) #讀取圖片 self.show() def SetPic(self,img): # self.lable.setPixmap(QPixmap(imgPath)) #圖片顯示 self.lable.setPixmap(QPixmap.fromImage(img)) # print(QPixmap(imgPath)) thstop=False #上面的這個來控制程序結束 def showcamre(): #引數0代表系統第一個攝像頭,第二就用1 以此類推 cap=cv2.VideoCapture(0) #設定顯示解析度和FPS ,不設定的話會非常卡 cap.set(cv2.CAP_PROP_FRAME_WIDTH,800) cap.set(cv2.CAP_PROP_FRAME_HEIGHT,600) cap.set (cv2.CAP_PROP_FPS,20) while cap.isOpened(): if thstop: return ret,frame=cap.read() if ret==False: continue #水平翻轉,很有必要 frame=cv2.flip(frame,1) #opencv 預設影象格式是rgb qimage要使用BRG,這裡進行格式轉換,不用這個的話,影象就變色了,困擾了半天,翻了一堆資料 frame=cv2.cvtColor(frame,cv2.COLOR_RGB2BGR) #mat-->qimage a=QImage(frame.data,frame.shape[1],frame.shape[0],QImage.Format_RGB888) ex.SetPic(a) app=QApplication(sys.argv) ex=initform() #全屏顯示 # ex.showFullScreen() #使用執行緒,否則程式卡死 th=Thread(target=showcamre) th.start() app.exec_() #退出的時候,結束程序,否則,關不掉程序 thstop=True