将Python Opencv Image(numpy数组)转换为PyQt QPixmap图像

问题描述 投票:6回答:5

我想将python opencv图像转换为QPixmap。

我按照指示显示Page Link,我的代码附在下面

img = cv2.imread('test.png')[:,:,::1]/255. 
imgDown = cv2.pyrDown(img)
imgDown = np.float32(imgDown)        
cvRGBImg = cv2.cvtColor(imgDown, cv2.cv.CV_BGR2RGB)
qimg = QtGui.QImage(cvRGBImg.data,cvRGBImg.shape[1], cvRGBImg.shape[0], QtGui.QImage.Format_RGB888)
pixmap01 = QtGui.QPixmap.fromImage(qimg)
self.image01TopTxt = QtGui.QLabel('window',self)
self.imageLable01 = QtGui.QLabel(self)
self.imageLable01.setPixmap(pixmap01)

代码没有编译和运行时错误,但转换错误,我只是得到一些噪声图像。我不确定问题是什么。有人可以帮忙吗?

python qt opencv qimage
5个回答
23
投票

使用它将cvImage转换为Qimage,这里cvImage是原始图像

height, width, channel = cvImg.shape
bytesPerLine = 3 * width
qImg = QImage(cvImg.data, width, height, bytesPerLine, QImage.Format_RGB888)

并将此Qimage设置为Qimage中的Lable.setPixmap参数。有用!!!


4
投票

只是补充AdityaIntwala的答案,如果图像看起来是红色或蓝色,那是因为格式不是RGB,而是BGR(反向)。在这种情况下,使用QImage.rgbSwapped方法更正:

height, width, channel = cvImg.shape
bytesPerLine = 3 * width
qImg = QImage(cvImg.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()

2
投票
#image is the numpy array that you got from cv2.imread(example_image.jpg)

image = QtGui.QImage(image, image.shape[1],\
                            image.shape[0], image.shape[1] * 3,QtGui.QImage.Format_RGB888)
pix = QtGui.QPixmap(image)

self.scene.addPixmap(pix)

0
投票

我推荐使用qimage2ndarray包来将numpy数组转换为Qimages。


0
投票

讨厌添加大量的答案,但因为这是唯一对我有用的东西,我会,以防其他人遇到同样的问题。

正如这里提到的https://gist.github.com/smex/5287589

首先在qazxsw poi调用中包装numpy数组/ ndarray,例如:

np.require(array, np.uint8, 'C')
© www.soinside.com 2019 - 2024. All rights reserved.