在用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) # 将场景添加至视图
以上两种方法便是在实际使用中,尝试过的两种方案,均可呈现图像。