2017-06-20 2 views
1

Ich versuche, Matplotlib in einer PyQt4 + Python 2.7-Anwendung einzubetten, so dass ich Bild (d. H. 2D) Daten in meiner Benutzeroberfläche visualisieren kann. Ich möchte Verwendung einiger matplotlib Funktionalität machen wie Farbtabellen, Zoomen usw. Ich habe ein paar Tutorials online gefunden, aber die nächste Sache, die mein Problem kommt, ist die folgende Frage SO:Einbetten von Matplotlib in PyQt4

Embedding matplotlib in pyqt4 using imshow

Wie der Autor möchte ich auch "imshow (...)" verwenden. Mit ein Tutorial Online kann ich matplotlib in meinem UI als QWidget einbetten wie folgt:

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import numpy as np 
from matplotlib.figure import Figure 
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 

class matPlotLibImage(FigureCanvas): 
    def __init__(self): 
     self.fig = Figure() 
     self.axes = self.fig.add_subplot(111) 
     self.x = np.arange(0.0, 3.0, 0.01) 
     self.y = np.cos(2*np.pi*self.x) 
     self.axes.plot(self.x, self.y) 
     super(MatPlotLibImage, self).__init__(self.fig) 

In meinem QDockWidget abgeleitete Klasse Code kann ich einbetten dann das oben matplotlib Widget über:

self.mainImage = MatPlotLibImage() 
self.setWidget(self.mainImage) 

Diese funktioniert und zeigt wie erwartet ein einfaches Diagramm an. Nun möchte ich jedoch Bilddaten anzeigen, die als numplige Arrays dargestellt werden. Alle Beispiele Ich bin online zu sehen sind, mit Varianten der folgenden Möglichkeiten:

import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 
import numpy as np 

img = mpimg.imread("someImage.png") 
imgplot = plt.imshow(img) 

Meine Frage ist: Wie kombiniere ich die beiden Ansätze, so dass ich verwenden kann ‚imshow()‘ aber eingebettet, wie ich für das tat einfache Handlung? Vielen Dank im Voraus.

Klarstellung: Genau genommen ist es nicht entscheidend, dass ich 'imshow (was auch immer)' benutze, ich bin nur daran interessiert, Bilddaten in meinem eingebetteten Matplotlib-Widget anzuzeigen. Imshow hat jedoch einige nützliche Dinge, die ich gerne nutzen würde.

Antwort

1

Es klingt wie Sie nur die Linie self.axes.plot(self.x, self.y) mit

self.axes.imshow(img) 

wo img ist die numpy Array des Bildes ersetzen müssen, dass Sie die vorherige haben müssen geladen.

+0

Vielen Dank. Bitte beachten Sie meinen Kommentar unten. – LKeene