PYQT QTGUI.QIMAGE显示图片异常,发生斜偏异常,且黑白显色
img = cv2.imread(path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
x = img.shape[1]
y = img.shape[0]
frame = QtGui.QImage(img, x, y, QtGui.QImage.Format_RGB888)
QtGui.QImage(uchar * data, int width, int height, int bytesPerLine, Format format)
这里省略了bytesPerLine造成图像显示异常
改正代码
img = cv2.imread(path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
x = img.shape[1]
y = img.shape[0]
frame = QtGui.QImage(img.data, x, y, x*3, QtGui.QImage.Format_RGB888)
参考博客:
https://blog.csdn.net/silenceasas/article/details/107480228
https://blog.csdn.net/ccchen706/article/details/71425653
转载于:
https://www.freesion.com/article/60661116325/
Python PyQt5 GraphicsView 图片显示虚影问题
出现虚影图像部分代码:
item=cv2.imread("D:/Dest/PyQt5ST/qACTION/PIC/actFile_Save.png")
item = cv2.cvtColor(item, cv2.COLOR_BGR2RGB)
x = item.shape[1] # 获取图像大小
y = item.shape[0]
self.zoomscale = 1 # 图片放缩尺度
frame = QImage(item, x, y, QImage.Format_RGB888)
pix = QPixmap.fromImage(frame)
self.item = QGraphicsPixmapItem(pix) # 创建像素图元
self.scene = QGraphicsScene() # 创建场景
self.scene.addItem(self.item)
self.item.setFlag(QGraphicsItem.ItemIsFocusable) # 选择时出现虚线框
self.item.setFlag(QGraphicsItem.ItemIsMovable) # 可移动
self.item.setFlag(QGraphicsItem.ItemIsSelectable) # 可选择
self.scene.clearSelection()
self.item.setSelected(True)
elf.view.setScene(self.scene)
解决:
item=cv2.imread("D:/Dest/PyQt5ST/qACTION/PIC/actFile_Save.png")
item = cv2.cvtColor(item, cv2.COLOR_BGR2RGB)
x = item.shape[1] # 获取图像大小
y = item.shape[0]
self.zoomscale = 1 # 图片放缩尺度
xs = x * 3
frame = QImage(item.data, x, y, xs, QImage.Format_RGB888) # 处理图片虚影问题**
pix = QPixmap.fromImage(frame)
self.item = QGraphicsPixmapItem(pix) # 创建像素图元
self.scene = QGraphicsScene() # 创建场景
self.scene.addItem(self.item)
self.item.setFlag(QGraphicsItem.ItemIsFocusable) # 选择时出现虚线框
self.item.setFlag(QGraphicsItem.ItemIsMovable) # 可移动
self.item.setFlag(QGraphicsItem.ItemIsSelectable) # 可选择
self.scene.clearSelection()
self.item.setSelected(True)
self.view.setScene(self.scene)
项目使用Pyqt作为UI框架,使用相机线程捕捉image,并在QGraphicsView中显示,遇到以下问题:
1 采集的数据为nparray数据,需转换为QImage 转换代码如下:
img=cv2.resize(src=img,dsize=None,fx=0.2,fy=0.2)
img2=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
self._image = QtGui.QImage(img2[:],img2.shape[1], img2.shape[0],img2.shape[1] * 3, QtGui.QImage.Format_RGB888)
注意:QImage(uchar * data, int width, int height, int bytesPerLine, Format format) 中的bytesPerLine 参数不能省略,负责造成Qimage数据错误,显示图片不正常,此参数设置为image的width*image.channels
2 采集数据的线程为非UI线程,则在QGraphicsView中显示时不仅需要添加Item对象,并且更新显示线程需在UI线程中,否则QGraphicsView不会主动更新显示,使用信号将image放到UI线程中更新即可
3 保证在UI更新时,所需更新的image还未被销毁,由于处于不同的线程,所以image可存储于更新前不会被销毁的对象中