69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
# ~*~ encoding: utf-8 ~*~ #
|
|
|
|
import random
|
|
import time
|
|
|
|
|
|
class Shape:
|
|
# récupère la forme complète autour du pixel donné #
|
|
####################################################
|
|
# @param originalPixel pixel de base
|
|
# @param pixelMap matrice de pixels
|
|
# @param seuil Ecart entre le pixel et ses alentours à partir duquel on considère un contour ou une continuité de la forme
|
|
#
|
|
# @return retourne la liste des pixels composant la forme (références)
|
|
#
|
|
def get(self, originalPixel, pixelMap, seuil=10):
|
|
width = len( pixelMap[0] )
|
|
height = len( pixelMap )
|
|
|
|
shape = [] # contiendra les pixels de la forme
|
|
waiting = [originalPixel] # contient les pixels à traiter
|
|
|
|
# on continue d'analyser tant qu'il y a des pixels à traiter
|
|
while len(waiting) > 0:
|
|
pixel = waiting[0]
|
|
|
|
# on ajoute le pixel à la forme
|
|
shape.append( pixel )
|
|
|
|
xm, xM = pixel.x, pixel.x # valeurs minimales et maximales de x autour du pixel
|
|
ym, yM = pixel.y, pixel.y # valeurs minimales et maximales de y autour du pixel
|
|
|
|
|
|
# si on est pas sur le bord gauche
|
|
if pixel.x > 0:
|
|
xm = pixel.x - 1
|
|
|
|
# si on est pas sur le bord droit
|
|
if pixel.x < width-1:
|
|
xM = pixel.x + 1
|
|
|
|
# si on est pas sur le bord haut
|
|
if pixel.y > 0:
|
|
ym = pixel.y - 1
|
|
|
|
# si on est pas sur le bord bas
|
|
if pixel.y < height-1:
|
|
yM = pixel.y + 1
|
|
|
|
|
|
|
|
# on parcourt les pixels alentours
|
|
for j in range(ym, yM+1):
|
|
for i in range(xm, xM+1):
|
|
currentP = pixelMap[j][i]
|
|
# si le pixel n'a pas une couleur trop éloignée du pixel central
|
|
if abs(pixel.r-currentP.r) <= seuil and abs(pixel.g-currentP.g) <= seuil and abs(pixel.b-currentP.b) <= seuil:
|
|
# on ajoute le pixel à la liste d'attente
|
|
if not( currentP in shape or currentP in waiting):
|
|
waiting.append( currentP )
|
|
|
|
|
|
# on retire le pixel de la liste d'attente
|
|
try:
|
|
waiting.remove( pixel )
|
|
except:
|
|
pass
|
|
|
|
return shape; |