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の更新時に、更新が必要なイメージが破棄されていないことを確認します。別のスレッドにあるため、更新前にイメージを保存できます。破棄されたオブジェクトの中で