PYQT QTGUI.QIMAGEは、異常な画像、異常なスキュー、および白黒の色を示します

ここに画像の説明を挿入します

img = cv2.imread(path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
x = img.shape[1]
y = img.shape[0]
frame = QtGui.QImage(img, x, y, QtGui.QImage.Format_RGB888)

QtGui.QImage(uchar * data、int width、int height、int bytesPerLine、Format format)
bytesPerLineはここでは省略されており、異常な画像表示が発生します。

コードを修正する

img = cv2.imread(path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
x = img.shape[1]
y = img.shape[0]
frame = QtGui.QImage(img.data, x, y, x*3, QtGui.QImage.Format_RGB888)

参照ブログ:
https //blog.csdn.net/silenceasas/article/details/107480228
https://blog.csdn.net/ccchen706/article/details/71425653

転載:
https //www.freesion.com/article/60661116325/

Python PyQt5GraphicsView画像表示ゴーストの問題

ゴーストイメージのコードの一部が表示されます。

item=cv2.imread("D:/Dest/PyQt5ST/qACTION/PIC/actFile_Save.png")
item = cv2.cvtColor(item, cv2.COLOR_BGR2RGB)
x = item.shape[1]  # 获取图像大小
y = item.shape[0]
self.zoomscale = 1  # 图片放缩尺度
frame = QImage(item, x, y, QImage.Format_RGB888)
pix = QPixmap.fromImage(frame)
self.item = QGraphicsPixmapItem(pix)  # 创建像素图元
self.scene = QGraphicsScene()  # 创建场景
self.scene.addItem(self.item)
self.item.setFlag(QGraphicsItem.ItemIsFocusable)  # 选择时出现虚线框
self.item.setFlag(QGraphicsItem.ItemIsMovable)  # 可移动
self.item.setFlag(QGraphicsItem.ItemIsSelectable)  # 可选择
self.scene.clearSelection()
self.item.setSelected(True)
elf.view.setScene(self.scene)

解決する:

item=cv2.imread("D:/Dest/PyQt5ST/qACTION/PIC/actFile_Save.png")
item = cv2.cvtColor(item, cv2.COLOR_BGR2RGB)
x = item.shape[1]  # 获取图像大小
y = item.shape[0]
self.zoomscale = 1  # 图片放缩尺度

xs = x * 3
frame = QImage(item.data, x, y, xs, QImage.Format_RGB888)  # 处理图片虚影问题**

pix = QPixmap.fromImage(frame)
self.item = QGraphicsPixmapItem(pix)  # 创建像素图元
self.scene = QGraphicsScene()  # 创建场景
self.scene.addItem(self.item)
self.item.setFlag(QGraphicsItem.ItemIsFocusable)  # 选择时出现虚线框
self.item.setFlag(QGraphicsItem.ItemIsMovable)  # 可移动
self.item.setFlag(QGraphicsItem.ItemIsSelectable)  # 可选择
self.scene.clearSelection()
self.item.setSelected(True)
self.view.setScene(self.scene)

プロジェクトはUIフレームワークとしてPyqtを使用し、カメラスレッドを使用して画像をキャプチャし、QGraphicsViewに表示しますが、次の問題が発生します
。1収集されたデータはnparrayデータであり、QImageに変換する必要があります。変換コードは次のとおりです。次のようになります:
img = cv2.resize(src = img、dsize = None、fx = 0.2、fy = 0.2)
img2 = cv2.cvtColor(img、cv2.COLOR_BGR2RGB)
self._image = QtGui.QImage(img2 [:]、img2 .shape [1]、img2.shape [0]、img2.shape [1] * 3、QtGui.QImage.Format_RGB888)
注:QImage(uchar * data、int width、int height、int bytesPerLine、FormatのbytesPerLineパラメーターformat)は省略できません。Qimageデータエラーと表示の原因になります。画像は正常ではありません。このパラメータは画像のwidth * image.channelsに設定されます。2
データを収集するスレッドは非UIスレッドです。 。QGraphicsViewに表示する場合、Itemオブジェクトを追加するだけでなく、UIスレッドの表示スレッドも更新する必要があります。そうしないと、QGraphicsViewは表示をアクティブに更新せず、信号を使用して画像をUIスレッドに配置します。 3
UIの更新時に、更新が必要なイメージが破棄されていないことを確認します。別のスレッドにあるため、更新前にイメージを保存できます。破棄されたオブジェクトの中で

おすすめ

転載: blog.csdn.net/lockhou/article/details/113407322