Usen fotografías tomadas por ustedes mismos.
Las fotografías que yo usaré son:
Dibujen encima de cada imagen una recta para cada pico del histograma lateral; independientemente para horizontal & vertical.
Imágenes mias:
![]() |
en esta imagen vemos que se dibujan varias líneas debido a que los agujeros no están alineados |
Imagen de internet 1:
Imagen de internet 2:
Imagen de internet 3:
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
#!/usr/bin/python | |
from PIL import Image, ImageDraw | |
import random | |
import filtros | |
import time | |
from math import sqrt, fabs | |
import sys | |
import matplotlib.pyplot as plt | |
import numpy as np | |
def dibuja_lineas(lista, imagen, op): | |
"""dibuja las lineas verdes si es horizontal | |
o rojo si es vertical | |
""" | |
x, y = imagen.size | |
draw = ImageDraw.Draw(imagen) | |
if op == 1: | |
for i in lista: | |
#lineas horizontales | |
draw.line((0,i, x,i), fill="green") | |
else: | |
for i in lista: | |
#lineas verticales | |
draw.line((i,0, i,y), fill="red") | |
return imagen | |
def encuentra_minimos(lista): | |
"""encuentra los minimos de la grafica | |
""" | |
c = 0 | |
promedio = 0 | |
minimos_temp = {} | |
minimos = {} | |
for i, valor in enumerate(lista): | |
try: | |
if lista[i-10]>=lista[i] and lista[i+10]>lista[i]: | |
minimos_temp[i]=lista[i] | |
c = c + 1 | |
promedio = promedio + valor | |
except: | |
pass | |
promedio = promedio/c | |
print minimos_temp | |
minimos_temp = sorted(minimos_temp.items(), key=lambda x: x[1]) | |
print "temporal" | |
print minimos_temp | |
for i in minimos_temp: | |
if i[1] < promedio: | |
minimos[i[0]] = i[1] | |
print minimos | |
return minimos | |
def graficar(columnas, renglones): | |
"""grafica dividiendo el canvas en 2 | |
columnas y renglones | |
""" | |
fig = plt.figure() | |
fig.subplots_adjust(hspace=.5) | |
uno = fig.add_subplot(2,1,1) | |
uno.plot(np.arange(len(renglones)), renglones) | |
uno.set_xlabel('renglon') | |
uno.set_ylabel('suma') | |
uno.set_title('Horizontal') | |
uno.grid(True) | |
dos = fig.add_subplot(2,1,2) | |
dos.plot(np.arange(len(columnas)), columnas, 'r') | |
dos.set_xlabel('columna') | |
dos.set_ylabel('suma') | |
dos.set_title('Vertical') | |
dos.grid(True) | |
plt.savefig('hola.png') | |
def vertical(pixeles,x,y): | |
"""sumatoria por columnas | |
""" | |
col_total = [] | |
for i in range(y): | |
col = [] | |
for j in range(x): | |
col.append(pixeles[j,i][0]) | |
col = sum(col) | |
col_total.append(col) | |
return col_total | |
def horizontal(pixeles,x,y): | |
"""sumatoria por renglones | |
""" | |
row_total = [] | |
for i in range(x): | |
row = [] | |
for j in range(y): | |
row.append(pixeles[i,j][0]) | |
row = sum(row) | |
row_total.append(row) | |
return row_total | |
def main(): | |
"""funcion principal | |
""" | |
VERTICAL = 1 | |
HORIZONTAL = 0 | |
MAXIMA = 1 | |
MINIMA = 0 | |
try: | |
imagen_path = sys.argv[1] | |
imagen = filtros.abrir_imagen(imagen_path) | |
except: | |
print "No seleccionaste una imagen" | |
return | |
imagen = filtros.hacer_gris(imagen) | |
imagen = filtros.normalizar(imagen) | |
original = imagen.copy() | |
#imagen = filtros.umbral(imagen) | |
imagen.show() | |
pixeles = imagen.load() | |
x, y = imagen.size | |
suma_columnas = vertical(pixeles,x,y) | |
suma_renglones = horizontal(pixeles,x,y) | |
#se encuentran los minimos de las columnas | |
min_col = encuentra_minimos(suma_columnas) | |
#se encuentran los minimos de los renglones | |
min_ren = encuentra_minimos(suma_renglones) | |
#se dibujan las lineas verticales | |
nueva = dibuja_lineas(min_col, original, 1) | |
#se dibujan las lineas horizontales | |
nueva = dibuja_lineas(min_ren, nueva, 2) | |
nueva.show() | |
graficar(suma_columnas, suma_renglones) | |
main() |
Refrencias
Visión computacional - Elisa Schaeffer
OK; 10 pts.
ResponderEliminar