/ / Jak ustawić obraz tablicy numpy na QWidget używając PyQt5 - python, obraz, qt, numpy, pyqt5

Jak ustawić obraz tablicy numpy na QWidget przy użyciu PyQt5 - python, image, qt, numpy, pyqt5

Czytam obraz z mojego aparatu jako tablicę numpy. Moim celem jest umieszczenie go w Qwidget z pyqt5 i wydrukowanie na moim głównym programie gui, ale otrzymuję następujący błąd:

TypeError: QPixmap(): argument 1 has unexpected type "numpy.ndarray"

Oto kod:

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from epics import PV
import numpy as np

class PanoramicGUI:
def __init__(self):
self.MainWindow = uic.loadUi("panoramicGUI.ui")

self.MainWindow.SavePositionButton. clicked.connect(self.save_image)

def save_image(self):
detectorData = PV("CAMERA:DATA")
self.data = detectorData.get()
self.data = np.array(self.data).reshape(2048,2048).astype(np.int32)
print(self.data)

img = PrintImage(QPixmap(self.data))

self.MainWindow.WidgetHV1X1.setLayout(QtWidgets.QVBoxLayout())
self.MainWindow.WidgetHV1X1.layout().addWidget(img)

class PrintImage(QWidget):
def __init__(self, pixmap, parent=None):
QWidget.__init__(self, parent=parent)
self.pixmap = pixmap

def paintEvent(self, event):
painter = QPainter(self)
painter.drawPixmap(self.rect(), self.pixmap)

if __name__ == "__main__":

app = QtWidgets.QApplication(sys.argv)
panoramic = PanoramicGUI()
panoramic.MainWindow.show()
app.exec_()

Czy ktoś może mi pomóc?

Pozdrowienia,

Gabriel.

Odpowiedzi:

1 dla odpowiedzi № 1

Istnieje wiele sposobów na to.

Jedną z opcji jest załadowanie obrazu bezpośrednio z dysku poprzez podanie ścieżki do pliku. Tak byś miał img = PrintImage(QPixmap(FILE_PATH)) gdzie FILE_PATH to jakiś ciąg znaków zamiast tablicy numpy. Aby uzyskać pełniejszy przykład, zobacz poniższy link: https://www.tutorialspoint.com/pyqt/pyqt_qpixmap_class.htm

Jeśli naprawdę chcesz go obsłużyć tablicą numpy, musisz utworzyć QtGui.QImage() obiekt pierwszy i przekaż go do swojego QtGui.QPixmap() obiekt zamiast tablicy numpy bezpośrednio. Zgodnie z dokumentacją QtGui.QImage(), musisz ustawić format danych, jeśli nie jest już w rozpoznanym formacie przez QtGui.QImage(). Tak więc powinny działać:

#Initialze QtGui.QImage() with arguments data, height, width, and QImage.Format
self.data = np.array(self.data).reshape(2048,2048).astype(np.int32)
qimage = QtGui.QImage(self.data, self.data.shape[0],self.data.shape[1],QtGui.QImage.Format_RGB32)
img = PrintImage(QPixmap(qimage))

Ostatni argument za QtGui.QImage() można zmienić na dowolne żądane spośród listy z dokumentacji tutaj http://srinikom.github.io/pyside-docs/PySide/QtGui/QImage.html#PySide.QtGui.PySide.QtGui.QImage.Format

To ostatnie łącze jest naprawdę dobre dla wszystkich rzeczy QtGui związane z.