Sie könnten versuchen, Pythons Image Library, PIL zu verwenden. Zuerst initialisierst du die Leinwand. Dann erstellen Sie ein Zeichenobjekt, und Sie fangen an, Linien zu erstellen. Dies setzt voraus, dass sich das Polygon in R^2 befindet und dass die Scheitelpunktliste für die Eingabe in der richtigen Reihenfolge ist.
Input = [(x1, y1), (x2, y2), ..., (xn, yn)], (Breite, Höhe)
from PIL import Image, ImageDraw
img = Image.new('L', (width, height), 0) # The Zero is to Specify Background Color
draw = ImageDraw.Draw(img)
for vertex in range(len(vertexlist)):
startpoint = vertexlist[vertex]
try: endpoint = vertexlist[vertex+1]
except IndexError: endpoint = vertexlist[0]
# The exception means We have reached the end and need to complete the polygon
draw.line((startpoint[0], startpoint[1], endpoint[0], endpoint[1]), fill=1)
# If you want the result as a single list
# You can make a two dimensional list or dictionary by iterating over the height and width variable
list(img.getdata())
# If you want the result as an actual Image
img.save('polgon.jpg', 'JPEG')
Ist das, was Sie suchen, Oder hast du etwas anderes gefragt?
Ich benutze den Bildmodus 'L', nicht '1', weil Numpy-1.5.0/PIL-1.1.7 das 'numpy.array nicht unterstützt (img) 'Konvertierung für Bivalue-Bilder. Der obere Teil des Arrays enthält 8 kleine Unterbilder 1/8 der erwarteten Maskengröße, wobei die restlichen 7/8 des Arrays mit Müll gefüllt sind. Vielleicht entpackt die Konvertierung die Binärdaten nicht richtig? –
Ich denke, dass diese Methode nur mit Integer-Koordinaten funktioniert (d. H. Die Gitterkoordinaten). Wenn die Eckpunktkoordinaten Floats sind, funktioniert die andere Lösung weiterhin. –
von: @jmetz "Nur zur Info: Ich habe einen einfachen Timing-Test gemacht und der PIL-Ansatz ist ~ 70 mal schneller als die Matplotlib-Version !!!" – Jakobovski