J'essaie de convertir python image opencv en QPixmap.
Je suis l'instruction montre Lien de page et mon code est joint ci-dessous
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)
Le code n'a pas d'erreur de compilation et d'exécution, mais la conversion est incorrecte et j'obtiens juste une image de bruit. Je ne sais pas quel est le problème. Quelqu'un pourrait-il aider?
Utilisez ceci pour convertir cvImage en Qimage, ici cvImage est l'image originale
height, width, channel = cvImg.shape
bytesPerLine = 3 * width
qImg = QImage(cvImg.data, width, height, bytesPerLine, QImage.Format_RGB888)
et définissez ce Qimage sur le paramètre Lable.setPixmap de Qimage. Ça marche!!!
Complétant simplement la réponse d'AdityaIntwala, si l'image semble être rouge ou bleue, c'est parce que le format n'est pas RVB, mais BGR (l'inverse). Dans ce cas, utilisez la méthode QImage.rgbSwapped pour corriger:
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)
Je recommande le package qimage2ndarray qui convertit les tableaux numpy vers/depuis Qimages.
Je déteste ajouter au grand nombre de réponses, mais comme c'était la seule chose qui a fonctionné pour moi, je le ferai, au cas où d'autres rencontreraient le même problème.
Comme mentionné ici sur GitHub
Enveloppez d'abord le tableau numpy/ndarry dans un appel à np.require(array, np.uint8, 'C')
, tel que:
arr2 = np.require(arr, np.uint8, 'C')
qImg = QtGui.QImage(arr2, width, height, QtGui.QImage.Format_RGB888)