web-dev-qa-db-ja.com

Python Opencv Image(numpy array))をPyQt QPixmap画像に変換

python opencv画像をQPixmapに変換しようとしています。

私は指示に従います ページリンク と私のコードは以下に添付されています

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)

コードにはコンパイルエラーと実行時エラーはありませんが、変換は正しくなく、ノイズイメージが表示されます。何が問題なのかわかりません。誰か助けてもらえますか?

14
SimaGuanxing

これを使用して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パラメータに設定します。できます!!!

24
AdityaIntwala

AdityaIntwalaの答えを補足するだけで、画像が赤または青に見える場合は、形式がRGBではなくBGR(逆)であるためです。この場合、QImage.rgbSwappedメソッドを使用して修正します。

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

Numpy配列をQimagesとの間で変換するqimage2ndarrayパッケージをお勧めします。

0
am70

多数の回答を追加するのは嫌いですが、他の人が同じ問題に遭遇した場合に備えて、これが私にとってうまくいった唯一のことでした。

前述のように ここではGitHub

最初にnumpy array/ndarryをnp.require(array, np.uint8, 'C')呼び出しでラップします。

arr2 = np.require(arr, np.uint8, 'C')
qImg = QtGui.QImage(arr2, width, height, QtGui.QImage.Format_RGB888)
0
so860