PyQt5注意问题
本篇所写的就是在做项目的时候,使用PyQt5显示图像时所遇到的问题
- 显示图片有两种方式,一种是使用Qlabel显示,一种是Graphicsview控件显示。
Qlabel可以显示文字,GIF,图片等等,有很多的资源可以参考
pix = QPixmap('1.jpg')
lb1 = QLabel(self)
lb1.setGeometry(0,0,300,200)
lb1.setStyleSheet("border: 2px solid red") #红色边框
lb1.setPixmap(pix)
lb2 = QLabel(self)
lb2.setGeometry(0,250,300,200)
lb2.setPixmap(pix)
lb2.setStyleSheet("border: 2px solid red") #红色边框
lb2.setScaledContents(True)
用Graphicsview控件显示图像,这里将显示图像方法写成一个函数。调用的时候就调用display_in_graphicsview(img) 即可。首先使用OpenCV获取原图像矩阵img。需要先创建一个QImage类的对象,输入参数见下面的程序。并且需要创建一个场景QGraphicsScene,把像素图元放进去,再显示出来。
def display_in_graphicsview(self,img):
x = img.shape[1] # 获取图像大小,行列
y = img.shape[0]
channel = img.shape[2]
bytesperline = channel * x #这里也可以不写
self.zoomscale = 1 # 图片放缩尺度
frame = QImage(img.data, x, y, bytesperline, QImage.Format_RGB888) #若不规定bytesperline,此处就写成frame = QImage(img.data, x, y, QImage.Format_RGB888)即可
pix = QPixmap.fromImage(frame)
self.item = QGraphicsPixmapItem(pix) # 创建像素图元
self.item.setScale(self.zoomscale)
self.scene = QGraphicsScene() # 创建场景
self.scene.addItem(self.item)
self.graphicsView.setScene(self.scene)
self.graphicsView.show()
在graphicsView中显示单通道的图像时,会出错。可以通过OpenCV中的cv2.merge()函数将单通道转换成3通道来显示。
eg: dst = cv2.merge(dst,dst,dst)