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