python opencv PyQt5

import cv2
import numpy as np
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import datetime


class Video():
    def __init__(self, capture):
        self.capture = capture
        capture.set(3,960) # set Width
        capture.set(4,2560) # set Height
        self.currentFrame = np.array([])

    def captureFrame(self):
        ret, readFrame = self.capture.read()
        return readFrame

    def captureNextFrame(self):
        ret, readFrame = self.capture.read()
        if (ret == True):

            readFrame=cv2.resize(readFrame, (int(960 / 4), int(2560 / 4)))
            
            #cv2.waitKey(1)
            self.currentFrame = cv2.cvtColor(readFrame, cv2.COLOR_BGR2RGB)

    def convertFrame(self):
        try:
            height, width = self.currentFrame.shape[:2]
            #print(height, width)
            img = QImage(self.currentFrame, width, height, QImage.Format_RGB888)
            img = QPixmap.fromImage(img)
            #self.previousFrame = self.currentFrame
            return img
        except:
            return None


class win(QMainWindow):
    def __init__(self, parent=None):
        super(win,self).__init__()
        self.setGeometry(250, 80, 960, 2560)
        self.setWindowTitle('camera')
        self.video = Video(cv2.VideoCapture(1))
        print(self.video)
        self._timer = QTimer(self)
        self._timer.timeout.connect(self.play)
        self._timer.start(2)
        self.update()
        self.videoFrame = QLabel('VideoCapture')
        self.videoFrame.setAlignment(Qt.AlignCenter)
        self.setCentralWidget(self.videoFrame)
        self.ret, self.capturedFrame = self.video.capture.read()

    def play(self):
        try:
            nowTime=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            print(nowTime)
            self.video.captureNextFrame()
            self.videoFrame.setPixmap(self.video.convertFrame())
            self.videoFrame.setScaledContents(True)
        except TypeError:
            print('No Frame')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = win()
    win.show()
    sys.exit(app.exec_())

  

posted @ 2019-07-25 22:02  ahuo  阅读(894)  评论(0编辑  收藏  举报