Hola compañeros en esta ocasión lo que se hara sera rellenar los elipses detectados de un color aleatorio. Como no tengo terminado lo que es detectar los elipses lo hice sacando su area y sus semidiametros.
Primero que nada use el bfs para trabajar por formas cuando ya tenia cada una de las formas trabaje con cada una de ellas sacando sus semidiametros y usando la formula del elipse para obtener el aea A=pi*a*b donde a y b son sus semidiametros si el are era igual quiere decir que es un elipse :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def c_colorear(self): | |
im=self.boton_convolucion() | |
#self.im2=self.boton_convolucion() | |
pixels=im.load() | |
porcentajes=[] | |
fondos=[] | |
centro_masa=[] | |
masa=[] | |
ancho,alto=im.size | |
t_pixels=ancho*alto | |
c=0 | |
pintar=[] | |
f=0 | |
for i in range(ancho): | |
for j in range(alto): | |
pix = pixels[i,j] | |
r,g,b= random.randint(0,255),random.randint(0,255), random.randint(0,255) | |
fondo=(r,g,b) | |
if (pix==(0,0,0)): | |
c +=1 | |
origen=(i,j) | |
num_pixels,abscisa,ordenada,puntos=self.bfs(pix,origen,im,fondo) | |
p=(num_pixels/float(t_pixels))*100 | |
if p>.10: | |
centro=(sum(abscisa)/float(num_pixels),sum(ordenada)/float(num_pixels)) | |
#centro_masa.append(centro) | |
masa.append(num_pixels) | |
v=self.detectar_elipse(num_pixels,im,centro,puntos,fondo) | |
if v==True: | |
porcentajes.append(p) | |
pintar.append(puntos) | |
# self.pintar(puntos) | |
fondos.append(fondo) | |
centro_masa.append(centro) | |
f +=1 | |
# print num_pixels | |
# centro_masa.append((sum(abscisa)/float(num_pixels),sum(ordenada)/float(num_pixels))) | |
# print centro_masa | |
# raw_input() | |
#self.detectar_elipse(masa,im,centro_masa,puntos,fondo) | |
#self.colocar_gris(im,porcentajes,fondos) | |
oi=self.pintar(pintar) | |
self.centro_masa(oi,centro_masa) | |
self.imprimir_porcentajes(porcentajes) | |
# print 'c',c | |
# print 'termino' | |
im.save('final.jpg') | |
return oi |
Código de detección del elipse:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def detectar_elipse(self,num_pixeles,im,centro,puntos,fondo): | |
pixels=im.load() | |
inicio=centro | |
#print centro | |
x,y=int(centro[0]),int(centro[1]) | |
# print x | |
# print y | |
im.save('checar.png') | |
a=self.semidiametrox(x,y,pixels,im,fondo) | |
# print 'regreso' | |
b=self.semidiametroy(x,y,pixels,im,fondo) | |
# print 'area',num_pixeles | |
# print 'a',a | |
# print 'b',b | |
area1=pi*a*b | |
if area1==num_pixeles: | |
# print 'es elipse' | |
return True | |
#raw_input() | |
# im.save('checar.png') | |
#while True: | |
def semidiametrox(self,aumenta,igual,pixels,im,fondo): | |
print 'sacando semidiametro' | |
pixels=im.load() | |
a=0 | |
# print 'aumenta',aumenta | |
# print 'igual',igual | |
# pixels[aumenta][igual]==(0,0,0) | |
while True: | |
if (pixels[aumenta,igual]==fondo): | |
# print 'entro al if' | |
aumenta +=1 | |
a +=1 | |
# pixels[aumenta,igual]==(23,44,123) | |
else: | |
break | |
#im.save('porfas.png') | |
return a | |
def semidiametroy(self,igual,aumenta,pixels,im,fondo): | |
print 'sacando semidiametro' | |
pixels=im.load() | |
b=0 | |
# print 'aumenta',aumenta | |
# print 'igual',igual | |
# pixels[aumenta][igual]==(0,0,0) | |
while True: | |
if (pixels[igual,aumenta]==fondo): | |
# print 'entro al if' | |
aumenta +=1 | |
b +=1 | |
# pixels[aumenta,igual]==(23,44,123) | |
else: | |
break | |
return b |
Imagen original:
Resultado Obtenido:
Porcentajes:
Ortografía... 10 pts. Si siguen apareciendo constantes arbitrarias como 4000, quitaré puntos en el futuro.
ResponderEliminar