Primeramente se aplica le echo en la tarea 2 pasada donde se programo un algoritmo BFS. Donde se buscaba el fondo negro y la figura, que en este caso es al reves busca el color blanco del contorno.
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
from random import * | |
import random | |
import pygame | |
from pygame.locals import * | |
import Image | |
import math | |
def bfs(image, dondeinicia, color): | |
image = Image.open("salidaconvolubinariza.png") | |
pixeles = image.load() | |
ancho, altura =image.size | |
for i in range(ancho): | |
for j in range(altura): | |
if pixeles[i, j] == (255, 255, 255): | |
pixeles = image.load() | |
ancho, altura = image.size | |
cola = [] | |
ver = [] | |
hor= [] | |
cola.append((dondeinicia)) | |
pixeldondeinicia = pixeles[dondeinicia]#Donde empezara | |
contador= 0 | |
while len(cola) > 0:#mientras la cola tenga valores | |
(x, y) = cola.pop(0)#se quita de la cola | |
puntoactual = pixeles[x, y]#punto actual toma el valor de la cola | |
if puntoactual == pixeldondeinicia or puntoactual == (color):#Si es igual al pixel donde inicia o a el color | |
for parax in [-1, 0, 1]:#Revisar los vecinos | |
for paray in [-1, 0, 1]: | |
i, j = (x + parax, y + paray) | |
if i >= 0 and i < ancho and j >= 0 and j < altura:#Si el pixel se encuentra dentro de los limites de la figura | |
contenido = pixeles[i, j] | |
if contenido == pixeldondeinicia: | |
pixeles[i, j] = (color)#le da el color r,g,b que tenga | |
ver.append((i,j)) | |
#hor.append(j) | |
contador += 1 | |
cola.append((i, j)) | |
return contador,ver |
Se crearon estas imagen para esta prueba. y este fue el resultado
Aquí esta el código
X
Aquí esta el código
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
from random import * | |
import random | |
import pygame | |
from pygame.locals import * | |
import Image | |
import math | |
def bfs(image, dondeinicia, color): | |
image = Image.open("salidaconvolubinariza.png") | |
pixeles = image.load() | |
ancho, altura =image.size | |
for i in range(ancho): | |
for j in range(altura): | |
if pixeles[i, j] == (255, 255, 255): | |
pixeles = image.load() | |
ancho, altura = image.size | |
cola = [] | |
ver = [] | |
hor= [] | |
cola.append((dondeinicia)) | |
pixeldondeinicia = pixeles[dondeinicia]#Donde empezara | |
contador= 0 | |
while len(cola) > 0:#mientras la cola tenga valores | |
(x, y) = cola.pop(0)#se quita de la cola | |
puntoactual = pixeles[x, y]#punto actual toma el valor de la cola | |
if puntoactual == pixeldondeinicia or puntoactual == (color):#Si es igual al pixel donde inicia o a el color | |
for parax in [-1, 0, 1]:#Revisar los vecinos | |
for paray in [-1, 0, 1]: | |
i, j = (x + parax, y + paray) | |
if i >= 0 and i < ancho and j >= 0 and j < altura:#Si el pixel se encuentra dentro de los limites de la figura | |
contenido = pixeles[i, j] | |
if contenido == pixeldondeinicia: | |
pixeles[i, j] = (color)#le da el color r,g,b que tenga | |
ver.append((i,j)) | |
#hor.append(j) | |
contador += 1 | |
cola.append((i, j)) | |
return contador,ver | |
TURN_LEFT, TURN_RIGHT, TURN_NONE = (1, -1, 0) | |
def turn(punto1, punto2, punto3): | |
return cmp((punto2[0] - punto1[0])*(punto3[1] - punto1[1]) - (punto3[0] - punto1[0])*(punto2[1] - punto1[1]), 0) | |
def cv(puntos): | |
convex_hull = [min(puntos)] | |
for i in range(len(puntos)): | |
q = puntos[0] | |
for j in range(len(puntos)): | |
t = turn(puntos[j], cv[i], q) | |
if q == cv[i] or t == TURN_LEFT : | |
q = puntos[j] | |
cv.append(q) | |
if q == cvl[0]: | |
break | |
return cv | |
def cv_bn(im): | |
image = Image.open("salidaconvolubinariza.png") | |
pixeles = image.load() | |
ancho, altura =image.size | |
hulls = [] | |
for i in range(ancho): | |
for j in range(altura): | |
if pixeles[i, j] == (255, 255, 255):#Se cambio para que encontrara blancos en vez de negros | |
contador, ver= bfs(image, (i, j), (255, 0, 0))#a mi Bfs que ya tenia | |
hulls.append(cv(ver)) | |
for hull in hulls: | |
for puntos in hull: | |
pixeles[puntos] = (0, 255, 0) | |
image.save("imagenfXXFINALLL.png",'png') | |
return hulls |
Debo de dar las gracias a Rafael Lopez que me ayudo y me paso este link de abajo que sirvió de muy buena referencia.
Referencias
OK lo obligatorio; 7 pts.
ResponderEliminar