I am trying to convert python opencv image to QPixmap.
I follow the instruction shows Page Link and my code is attached below
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)
The code has no compile and runtime error but the conversion is wrong and I just get some noise image. I am not sure what the problem is. Could anyone help?
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)`
来源:https://stackoverflow.com/questions/34232632/convert-python-opencv-image-numpy-array-to-pyqt-qpixmap-image