Zum Beispiel möchte ich das Bild unten lesen und die Anordnung jedes Blocks bestimmen.
Ich habe versucht, den Wert durch Vorlagenanpassung mit OpenCV zu ermitteln, aber es dauert einige Zeit, bis jedes Bild übereinstimmt, und alle Bilder mit hoher Korrelation innerhalb des Schwellenwerts werden ausgegeben. Wählen Sie sie daher aus. Die Kosten waren hoch, weil ich ein Programm schreiben musste.
Unter Verwendung der RGB-Daten in der PIL-Bibliothek werden die RGB-Daten des für jeden Block ausgeschnittenen Bildes korreliert und als die Farbe erkannt, die dem Referenzwert am nächsten liegt.
Verwenden Sie das PIL-Image-Objekt.
import numpy
from PIL import Image
def get_rgb(pic, box=""):
if box == "":
box = (0, 0, pic.width, pic.height)
rgbimg = pic.crop(box).convert("RGB")
rgb = np.array(rgbimg.getdata())
return [__round(rgb[:,0]),
__round(rgb[:,1]),
__round(rgb[:,2])]
def color(array):
col = {}
col["red"] = [100, 20, 20] #geeignet
#Betten Sie während dieser Zeit den Standardwert für Farbe ein
col["heart"] = [100, 70, 70] #geeignet
max = 0
result = ""
for k, c in col.items:
tmp = numpy.corrcoef(numpy.array(array), numpy.array(c))[0][1]
if max < tmp:
result = k
max = tmp
return result
def __round(array):
return int(round(np.average(array)))
if __name__ == "__main__":
'''
xa :Startpunkt, xs :Blockbreite, xb :Endpunkt
ya :Startpunkt, ys :Blockhöhe, yb :Endpunkt
'''
pic = Image.open("/path/to/Image.png ", 'r')
for i in xrange(6):
for j in xrange(5):
box = (xa + xs*i,
ya + ys*j,
xb + xs*i,
yb + ys*j)
rgb = get_rgb(pic, box)
print color(rgb)
In diesem Fall gibt es kein besonderes Problem in Bezug auf die Geschwindigkeit, und die Erkennungsrate ist auch angemessen. Gelegentlich fällt sie wie eine Nullteilung ab.
Ist Pazudora interessant? Ich habe es nie getan.
Recommended Posts