使用NumPy和PyQt4反复显示随机噪声图像

时间:2013-04-01 13:08:29

标签: python numpy pyqt scipy

我无法重复使用QTimer

  1. 生成逐个宽度为3的numpy数组
  2. 将numpy数组转换为Qt友好图像,
  3. 在Qt主窗口中显示图像
  4. (最终图像不会是随机的。)

    以下是相关代码。

    import numpy as np
    from scipy.misc.pilutil import toimage
    from PIL.ImageQt import ImageQt
    
    def nparrayToQPixmap(arrayImage):
        pilImage = toimage(arrayImage)
        qtImage = ImageQt(pilImage)
        qImage = QtGui.QImage(qtImage)
        qPixmap = QtGui.QPixmap(qImage)
        return qPixmap
    
    class DetectionWidget(QtGui.QWidget):
    
        def __init__(self):
    
            super(DetectionWidget, self).__init__()
            self.timer = QtCore.QTimer()
            self.init_UI()
    
        def init_UI(self):
    
            self.setFixedSize(self.WIDTH, self.HEIGHT)
            self.label = QtGui.QLabel(self)
            self.label.resize(self.WIDTH, self.HEIGHT)
    
            self.timer.timeout.connect(self.onTimeout)
    
            self.timer.start(1000)
    
        def onTimeout(self):
    
            npImage = np.random.rand(self.HEIGHT, self.WIDTH, 3)
            qPixmap = nparrayToQPixmap(npImage)
            self.label.setPixmap(qPixmap)
    

    这会显示FIRST图像,但是在self.label.setPixmap(qPixmap)的第二次迭代中,Python分段会出错。此外,即使我不更新标签而是使用qPixmap.save(...)保存图像,它也会出现分段错误,这让我觉得生成的qPixmap在第一次迭代后会以某种方式损坏。

    我将不胜感激任何帮助!

1 个答案:

答案 0 :(得分:1)

这似乎是因为QImageQPixmap转换中存在错误。只要QImage格式正确,代码就会起作用。

qImage = QtGui.QImage(qtImage)

变为

qImage = QtGui.QImage(qtImage).convertToFormat(QtGui.QImage.Format_ARGB32)