Convert Python Opencv Image (numpy array) to PyQt QPixmap image

会有一股神秘感。 提交于 2019-11-28 19:00:22

Use this to convert cvImage to Qimage, here cvImage is original image

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

and set this Qimage to Lable.setPixmap parameter from Qimage. It Works!!!

Just complementing the answer of AdityaIntwala, if the image appears to be red or blue, it is because the format is not RGB, but BGR (the inverse). In this case, use the QImage.rgbSwapped method to correct:

height, width, channel = cvImg.shape
bytesPerLine = 3 * width
qImg = QImage(cvImg.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()
#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)

I recommend the package qimage2ndarray that converts numpy arrays to/from Qimages.

Hate to add to the large number of answers, but as this was the only thing that worked for me I will, in case others run into the same issue.

As mentioned here https://gist.github.com/smex/5287589

Wrap the numpy array/ndarry in a np.require(array, np.uint8, 'C') call first, such as:

`arr2 = np.require(arr, np.uint8, 'C')`
`qImg = QtGui.QImage(arr2, width, height, QtGui.QImage.Format_RGB888)`
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!