1

QTimer を繰り返し使用するのに問題があります

  1. 高さ×幅×3のnumpy配列を生成する
  2. numpy 配列を Qt に適したイメージに変換し、
  3. Qt のメイン ウィンドウに画像を表示する

(最終的に画像はランダムではなくなります。)

関連するコードは次のとおりです。

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)

これは最初の画像を表示しますが、Python のセグメンテーションは での 2 回目の反復で失敗しますself.label.setPixmap(qPixmap)。また、ラベルを更新せずに を使用して画像を保存してもセグメンテーション違反がqPixmap.save(...)発生するため、最初の反復後に結果の qPixmap が何らかの形で破損していると思われます。

どんな助けにも感謝します!

4

1 に答える 1

1

これはQImagetoQPixmap変換のバグによるものと思われます。QImageが正しい形式である限り、コードは機能します。

qImage = QtGui.QImage(qtImage)

になる

qImage = QtGui.QImage(qtImage).convertToFormat(QtGui.QImage.Format_ARGB32)
于 2013-04-02T12:40:37.010 に答える