我正在使用具有三个进程的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)
谢谢
不幸的代码