将Python Opencv图片对象转成PyQt4中的QImage对象

环境: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中显示。但是,下面这张图片,就不能正常显示了

 

原图:

将Python Opencv图片对象转成PyQt4中的QImage对象_第1张图片

异常结果:

将Python Opencv图片对象转成PyQt4中的QImage对象_第2张图片

 

解决代码:

# 加载图片
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即可。

你可能感兴趣的:(Python,Opencv,PyQt)