Lassen Sie uns zunächst ein Bild des Buchstaben B mit PIL bauen:
import Image, ImageDraw, ImageFont
image = Image.new("RGBA", (600,150), (255,255,255))
draw = ImageDraw.Draw(image)
fontsize = 150
font = ImageFont.truetype("/usr/share/fonts/truetype/liberation/LiberationMono-Regular.ttf", fontsize)
txt = 'B'
draw.text((30, 5), txt, (0,0,0), font=font)
img = image.resize((188,45), Image.ANTIALIAS)
print type(img)
plt.imshow(img)
Sie einen besseren Weg, dies zu tun finden können, insbesondere mit Pfad zu den Schriftarten. Ii wäre besser, ein Bild zu laden, anstatt es zu erzeugen. Wie auch immer, wir haben jetzt etwas zu arbeiten:
nun den Realteil:
import mahotas as mh
img = np.array(img)
im = img[:,0:50,0]
im = im < 128
skel = mh.thin(im)
noholes = mh.morph.close_holes(skel)
plt.subplot(311)
plt.imshow(im)
plt.subplot(312)
plt.imshow(skel)
plt.subplot(313)
cskel = np.logical_not(skel)
choles = np.logical_not(noholes)
holes = np.logical_and(cskel,noholes)
lab, n = mh.label(holes)
print 'B has %s holes'% str(n)
plt.imshow(lab)
Und wir haben in der Konsole (ipython): B hat zwei Löcher
Die Implementierung eines einfachen Graphen ist mit Python-Wörterbüchern einfach. Hier ist [ein Beispiel aus den Python-Dokumenten] (http://www.python.org/doc/essays/graphs/). NetworkX scheint übertrieben zu sein, obwohl ich es nie benutzt habe. In Bezug auf die Umwandlung des Bildes in ein Diagramm, ich kenne keine einfache Möglichkeit, es zu tun, obwohl es wie ein interessantes Problem scheint. Ich benutze [opencv] (http://opencv.org/), das viele Funktionen zur Manipulation von Bildern bietet. Sie könnten einige nützliche Teile darin finden. – KobeJohn