界面可视化(四):图像在PyQT5上的显示

在用PyQt5开发GUI界面的时候,要呈现图像。在使用时,用了两种呈现方法,方法1通过Qlabel去呈现,方法2通过QGraphicsView去呈现。两个方法中,方法2具有更优的灵活性和呈现速度。

方法1:Qlabel

因为Qlabel不能直接显示img类型,因此需要将其转换为QImage类型。相关代码如下:

self.ImageView = QtWidgets.QLabel(Detection)
self.ImageView.setGeometry(QtCore.QRect(60, 60, 461, 411))
self.ImageView.setText("")
self.ImageView.setObjectName("ImageView")

# 由于QLabel不能直接显示img类型,需要转化成QImage类型
showImage = QtGui.QImage(show.data, show.shape[1], show.shape[0], 
   QtGui.QImage.Format_RGB888)
self.ImageView.setPixmap(QtGui.QPixmap.fromImage(showImage))

该方法转换时间较长,我某次测算的转换时间差不多在200ms,但很可能是转换错了。

方法2:QGraphicsView

该方法差不多是主流呈现图像的方法,众多博客都有介绍其基本算法,在此仅对使用的内容进行一个展示。代码如下:

        self.graphicsView = QtWidgets.QGraphicsView(Wohaoshuai)
        self.graphicsView.setGeometry(QtCore.QRect(50, 50, 481, 431))
        self.graphicsView.setObjectName("graphicsView")        



        # 在QgraphicsScene上呈现检测结果图
        showImage = QtGui.QImage(show.data, show.shape[1], show.shape[0], QtGui.QImage.Format_RGB888)
        pix = QtGui.QPixmap.fromImage(showImage)
        self.item = QGraphicsPixmapItem(pix)  # 创建像素图元
       
        self.scene = QGraphicsScene()  # 创建场景
        self.scene.addItem(self.item)
        self.graphicsView.setScene(self.scene)  # 将场景添加至视图

以上两种方法便是在实际使用中,尝试过的两种方案,均可呈现图像。

你可能感兴趣的:(GUI)