从文件夹中读取帧并在 pyqt4 的 QGraphicsView 中显示

Reading frames from a folder and display in QGraphicsView in pyqt4

我正在尝试读取文件夹的框架并在 QGraphics 视图中显示。

import os
import PyQt4
from PyQt4 import QtCore, QtGui
dir = "frames"
for file in os.listdir(dir):
    grview = QtGui.QGraphicsView()
    scene = QtGui.QGraphicsScene()
    #pixmap = QtGui.QPixmap(os.path.join(dir, file))
    pixmap = QtGui.QPixmap(file)    
    item = QtGui.QGraphicsPixmapItem(pixmap)
    self.scene.addItem(item)
    grview.setScene()    
    grview.show()
    #self.scene.update()

名为"frames"的文件夹包含jpg文件,与代码在同一个文件夹中。但是我仍然无法读取帧。

我也尝试过不使用 graphicsview 的常规显示,使用下面的代码检查它是否有效,但它也不起作用。

import cv2
import os
import PyQt4
from PyQt4 import QtGui,QtCore
import matplotlib.pyplot as plt
from PIL import Image

def load_images_from_folder(folder):
    images = []
    for filename in os.listdir(folder):
        img = cv2.imread(os.path.join(folder,filename))
        if img is not None:
            images.append(img)
    return images

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)    

    img = load_images_from_folder('/frames')
    image = Image.open(img)
    image.show()

我不明白我错过了什么。我想在 QGraphicsView 中按顺序显示图像,类似于视频,在某些特定帧中,我必须 select 感兴趣的对象,方法是在其周围绘制一个矩形,该矩形也必须保留在后续帧中。我正在尝试的任务可能吗?如果是,我们将不胜感激

抱歉,我有 PyQt5。 试一试:

import os
import sys

from PyQt5 import Qt
#from PyQt4 import QtCore, QtGui

class MainWindow(Qt.QMainWindow):
    def __init__(self, parent=None):
        Qt.QMainWindow.__init__(self, parent)

        self.scene  = Qt.QGraphicsScene()
        self.grview = Qt.QGraphicsView(self.scene)
        self.setCentralWidget(self.grview)

        dir = "frames"
        self.listFiles = os.listdir(dir)

        self.timer = Qt.QTimer(self)    
        self.n = 0
        self.timer.timeout.connect(self.on_timeout)
        self.timer.start(1000)

        self.setGeometry(700, 150, 300, 300)
        self.show()

    def on_timeout(self):

        if self.n < len(self.listFiles):
            self.scene.clear()
            file = self.listFiles[self.n]
            pixmap = Qt.QPixmap("frames\{}".format(file))    # !!!  "frames\{}"
            item   = Qt.QGraphicsPixmapItem(pixmap)
            self.scene.addItem(item)
            self.grview.setScene(self.scene)                 # !!! (self.scene)
            self.n += 1
        else:
            self.timer.stop()

app = Qt.QApplication(sys.argv)
GUI = MainWindow()
sys.exit(app.exec_())