环境:Windows10平台下,Python27+cv2,PyQt4
问题:有张图片的分辨率是843x1589,32位的RGB转QImage时图片显示异常。
问题代码:
# 加载图片 if os.path.exists(imgdir): self.txImgPath.setText(dir) self.img = cv2.imread(imgdir) if self.img is None: return None self.img_rgb = cv2.cvtColor(self.img, cv2.COLOR_BGR2RGB) self.QtImg = QtGui.QImage(self.img_rgb.data, self.img_rgb.shape[1], self.img_rgb.shape[0],QtGui.QImage.Format_RGB888) # 显示图片到label中; self.labImage.resize(QtCore.QSize(self.img_rgb.shape[1], self.img_rgb.shape[0])) self.labImage.setPixmap(QtGui.QPixmap.fromImage(self.QtImg)) else: print u'图片路径不存在'
代码说明:
首先,通过cv2.imread读取图片,再将BGR转成RGB格式,然后按RGB888格式转换成QImage对象,一般情况下图片都能正常在label中显示。但是,下面这张图片,就不能正常显示了
原图:
异常结果:
解决代码:
# 加载图片 if os.path.exists(imgdir): self.txImgPath.setText(dir) self.img = cv2.imread(imgdir) if self.img is None: return None # 将图片转成BGRA模式; self.img_rgb = cv2.cvtColor(self.img, cv2.COLOR_BGR2BGRA) self.QtImg = QtGui.QImage(self.img_rgb.data, self.img_rgb.shape[1], self.img_rgb.shape[0],QtGui.QImage.Format_RGB32) # 显示图片到label中; self.labImage.resize(QtCore.QSize(self.img_rgb.shape[1], self.img_rgb.shape[0])) self.labImage.setPixmap(QtGui.QPixmap.fromImage(self.QtImg)) else: print u'图片路径不存在'
代码说明:只要将图片转换成BGRA格式,再按RGB32格式转换成QImage即可。