Par exemple, une fois que data est converti en un tableau numpy img :
forxinxrange(W):foryinxrange(H):acc=sum(data[x+(y*W)])ifacc>limit:# filter values according to brightness limitX[x]+=accY[y]+=acc# find the brightest columnforx,vinenumerate(X):ifv>maxX[0]:maxX=(v,x)# find the brightest rowfory,vinenumerate(Y):ifv>maxY[0]:maxY=(v,y)
# if no spot brighter than limit, lower limit, recurseifmaxX[0]==0ormaxY[0]==0:print"[ center not found, lower limit to",limit/2,']',returngetCenter(im,limit/2)
pourrait être testé avant de faire toutes les sommes qui précèdent : il suffit de tester que le pixel maximum soit au-dessus de la limite.
[^] # Re: Amélioration du script
Posté par Pierre Roc . En réponse au journal ISS : le flim. Évalué à 4. Dernière modification le 12 août 2012 à 22:29.
Il faudrait convertir les données en tableau numpy et faire le traitement sans boucle, en utilisant les facilités de numpy.
Pour convertir je suis tombé sur ça :
http://code.activestate.com/recipes/577591-conversion-of-pil-image-and-numpy-array/
Par exemple, une fois que
dataest converti en un tableau numpyimg:peut être habilement remplacé par :
(sauf erreur de ma part)
Et ça :
pourrait être testé avant de faire toutes les sommes qui précèdent : il suffit de tester que le pixel maximum soit au-dessus de la limite.