Frage

Ich brauche einen numpy 2D-Array zu erstellen, die eine binäre Maske eines Polygons darstellt, unter Verwendung von Standard-Python-Paketen.

  • Eingabe: Polygon-Scheitelpunkte, Bildabmessungen
  • Ausgabe: binäre Maske von Polygon (numpy 2D-Array)

(größerer Kontext. Ich mag die Distanz verwandelt dieses Polygons erhalten scipy.ndimage.morphology.distance_transform_edt verwenden)

Kann jemand mir zeigen, wie dies zu tun?

War es hilfreich?

Lösung

Die Antwort stellt sich heraus, ganz einfach sein:

import numpy
from PIL import Image, ImageDraw

# polygon = [(x1,y1),(x2,y2),...] or [x1,y1,x2,y2,...]
# width = ?
# height = ?

img = Image.new('L', (width, height), 0)
ImageDraw.Draw(img).polygon(polygon, outline=1, fill=1)
mask = numpy.array(img)

Andere Tipps

Sie könnten auf die Nutzung Python versuchen Bild-Bibliothek, PIL. Zuerst die Leinwand initialisieren. Dann erstellen Sie ein Zeichnungsobjekt, und Sie beginnen, Linien zu machen. Dies wird unter der Annahme, daß das Polygon besteht in R ^ 2, 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 waren Sie etwas anderes fragen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top