PYQT Qlabel pixmap от PyCamera - PullRequest
0 голосов
/ 13 ноября 2018

Я работаю с многопроцессорной программой Python с тремя процессами.Первый захватывает изображения из модуля pyCamera, второй представляет собой графический интерфейс, а третий выполняет простую обработку изображений.Я пытаюсь показать текущее изображение, снятое камерой в Qlabel.Мне не нужно иметь более 10 кадров в секунду, это может быть даже медленным, как 1 кадр / с.Но каждый раз, когда я использую 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, но вместо того, чтобы потратить одну секунду на обновление, как предполагает конфигурация таймера, требуется около 5 секунд, чтобы показать любое изменение изображения.Я попытался использовать OwnImageWidget, показанный здесь https://www.kurokesu.com/main/2016/08/01/opencv-usb-camera-widget-in-pyqt/, и он обновляет изображения вовремя, но 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)

Спасибо

unlucky_code

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...