Najpierw zbudować wizerunek literę B z PIL:
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)
można znaleźć lepszy sposób, aby to zrobić, szczególnie w drodze do czcionek. Ii lepiej byłoby załadować obraz zamiast go generować. W każdym razie, mamy teraz coś do pracy na:
Teraz, części rzeczywistej:
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)
I mamy w konsoli (ipython): B posiada 2 otwory
Implementacja prostego wykresu jest łatwa w przypadku słowników Pythona. Oto [przykład z Pythona docs] (http://www.python.org/doc/essays/graphs/). NetworkX wydaje się być przesadą, chociaż nigdy jej nie używałem. Jeśli chodzi o konwersję obrazu na wykres, nie wiem, jak to zrobić, chociaż wydaje się, że jest to ciekawy problem. Używam [opencv] (http://opencv.org/), który zapewnia wiele funkcji do manipulowania obrazami. Możesz znaleźć w nim kilka użytecznych części. – KobeJohn