Par exemple, je veux lire l'image ci-dessous et déterminer la disposition de chaque bloc.
J'ai essayé d'obtenir la valeur par Template Matching en utilisant OpenCV, mais il faut du temps pour faire correspondre chaque image, et toutes les images avec une forte corrélation dans le seuil sont sorties, alors sélectionnez-les. Le coût était élevé car je devais écrire un programme.
En utilisant les données RVB de la bibliothèque PIL, les données RVB de l'image découpée pour chaque bloc sont corrélées et reconnues comme la couleur la plus proche de la valeur de référence.
Utilisez l'objet Image PIL.
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] #adapté
#Pendant ce temps, intégrez la valeur standard de la couleur
col["heart"] = [100, 70, 70] #adapté
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 :point de départ, xs :Largeur de bloc, xb :point final
ya :point de départ, ys :Hauteur de bloc, yb :point final
'''
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)
Dans ce cas, il n'y a pas de problème particulier en termes de vitesse, et le taux de détection est également raisonnable, parfois il baisse comme une division zéro.
Pazudora est-il intéressant? Je ne l'ai jamais fait.
Recommended Posts