来自PyCamera的PYQT Qlabel像素图

时间:2018-11-13 07:08:55

标签: pyqt5 qlabel qpixmap

我正在使用具有三个进程的python多处理程序。第一个从pyCamera模块捕获图像,第二个是GUI,第三个则进行一些简单的图像处理。我正在尝试在Qlabel中显示相机拍摄的当前图像。我不需要超过10 fps,它甚至可以慢到1 fps。但是每次我使用setPixmap时,看起来更新后的图像都花了很长时间才能显示。

class Ui_MainWindow(QtWidgets.QMainWindow):

    def __init__(self):
        super(Ui_MainWindow,self).__init__()
        uic.loadUi('/usr/local/bin/meltingPoints/GUI.ui',self)

        #variables that contain the captured image
        self.Gimage = mp.Array('B',768*1024*3,lock = mp.Lock())

       #Image update timer
       self.updateTimer = QtCore.QTimer()
       self.updateTimer.timeout.connect(self.update_labels)
       self.updateTimer.start(1000)

    def update_labels(self):
       #Reading the image from mp.Array
       self.Gimage.acquire()
       imageD = np.frombuffer(self.Gimage.get_obj(),dtype=np.uint8)
       self.Gimage.release()

       #Converting the image to Qimage
       imageD.shape = [768,1024,3]
       imageP = Image.fromarray(imageD[0:564,149:901,:].astype('uint8'), 'RGB')
       imageQ = ImageQt(imageP.resize((400,300)))

       #Setting Pixmap
       self.imageDisplay.setPixmap(QtGui.QPixmap.fromImage(imageQ))

       #Other simple label text updates go on after this

我确实在Qlabel小部件中获得了一个图像,但是没有花一秒钟的时间按照Timer配置建议进行更新,而是需要大约5秒钟来显示图像中的任何变化。我尝试使用https://www.kurokesu.com/main/2016/08/01/opencv-usb-camera-widget-in-pyqt/所示的OwnImageWidget,它确实会按时更新图像,但是在图像更新发生时,GUI变得无响应。

关于可能发生的事情的任何想法?我还将包括捕获图像的函数(此函数在主脚本中称为进程,并将图像捕获到两个不同的多处理数组中)

from time import sleep

import numpy as np
import picamera

def fotografo(Gimage,Oimage):
    #Configuracion y encendido de la camara
    with picamera.PiCamera() as camera:
        #Fotos en blanco y negro
        camera.color_effects = (128,128)
        #Resolucion maxima
        camera.resolution = (1024,768)
        #Cambio de los parametros para fotos consistentes
        camera.iso = 600
        sleep(2)
        camera.shutter_speed = camera.exposure_speed
        camera.exposure_mode = 'off'
        g = camera.awb_gains
        camera.awb_mode = 'off'
        camera.awb_gains = g

        Pic = np.empty((768*1024*3), dtype = np.uint8)

        while True:
            camera.capture(Pic,'rgb')
            Gimage[:] = Pic
            Oimage[:] = Pic
            sleep(0.25)

谢谢

不幸的代码

0 个答案:

没有答案