Foros del Web » Programando para Internet » Python »

como crear funcion de filtros para imagenes?

Estas en el tema de como crear funcion de filtros para imagenes? en el foro de Python en Foros del Web. Hola!! Necesito una ayudita, tengo que crear 3 filtros para aplicarle a una imagen de pixeles creada con una matriz. 1) Filtro reflexion horizontal (espejo) ...
  #1 (permalink)  
Antiguo 16/10/2010, 07:22
angel10
Invitado
 
Mensajes: n/a
Puntos:
Exclamación como crear funcion de filtros para imagenes?

Hola!!
Necesito una ayudita, tengo que crear 3 filtros para aplicarle a una imagen de pixeles creada con una matriz.
1) Filtro reflexion horizontal (espejo)
2)Filtro blanco y negro ()
3)Filtro Mitad alto (reducir la altura de la imagen a la mitad y que el dibujo quede centrado)
Alguna idea, sugerencia??
les dejo lo que tengo hasta ahora, gracias!!

Código Python:
Ver original
  1. AYUDA del módulo 'moduloimagen'. Define tres funciones,
  2. # que podemos utilizar de la siguiente forma:
  3. #
  4. # - matriz = leerIm(nombreFichero). Lee la imagen del fichero
  5. #   indicado y la devuelve como una matriz de enteros. Cada
  6. #   elemento de la matriz se corresponde con un pixel de la
  7. #   imagen.
  8. #
  9. # - id = dibujarIm(matriz). Se dibuja la imagen en la ventana
  10. #   gráfica. La imagen se escala automáticamente para ocupar toda
  11. #   la ventana gráfica. El valor devuelto por la función puede
  12. #   utilizarse para borrar la imagen con la función que se presenta
  13. #   a continuación.
  14. #
  15. # - borrarImagen(id). Borra la imagen identificada como 'id'.
  16. #
  17.  
  18.  
  19. def menu():
  20.   opcion = ' '
  21.   while len(opcion) != 1 or opcion not in 'abc':
  22.     print 'Filtros de Imagen.'
  23.     print 'a) Reflexion Horizontal.'
  24.     print 'b) Blanco y Negro.'
  25.     print 'c) Mitad Alto.'
  26.     opcion = raw_input('Escoja una opcion: ')
  27.     if len(opcion) != 1 or opcion not in 'abc':
  28.       print 'Solo puede escoger las letras a, b o c. Intentelo de nuevo.'
  29.   return opcion
  30.  
  31. def _entero2color(n):
  32.   return '#'+('%02x'%n)*3
  33.  
  34. def leerIm(nombreFichero):
  35.   #lee imagen del fichero tux.txt
  36.   f=open(nombreFichero)
  37.   im1=f.read()
  38.   f.close()
  39.   #convierte datos en matriz
  40.   lin=im1.split('\n')
  41.   mat=[]
  42.   for l in lin:
  43.     if l=='': break
  44.     mat.append(map(int,l.split()))
  45.   return mat
  46.  
  47. def dibujarIm(mat):
  48.   filas=len(mat)
  49.   columnas=len(mat[0])
  50.   l=[]
  51.   xx1,yy1,xx2,yy2=window_coordinates()
  52.  
  53.   px=float(xx2-xx1)/columnas
  54.   py=float(yy2-yy1)/filas
  55.   for i in range(filas):
  56.     for j in range(columnas):
  57.       if mat[i][j]==-1:
  58.         col='#ffff00'
  59.       else:
  60.         col=_entero2color(mat[i][j])
  61.       x1=xx1+px*j
  62.       y1=yy2-py*(i+1)
  63.       x2=xx1+px*(j+1)
  64.       y2=yy2-py*i
  65.       l.append(create_filled_rectangle(x1,y1,x2,y2,col))
  66.   return l
  67.  
  68. def borrarIm(ind):
  69.   map(erase,ind)
  70.  
  71.  
  72.  
  73. def reflexion_horizontal(mat):
  74.   for i in range(len(mat)/2):
  75.     c = mat[i]
  76.     mat[i] = mat[len(mat)-1-i]
  77.     mat[len(mat)-1-i] = c
  78.   return c
  79.  
  80.  
  81.  
  82.  
  83. # La función leerIm("tux78x70.txt") lee la imagen y
  84. # devuelve una matriz:
  85.  
  86. mat = leerIm("tux78x70.txt")
  87.  
  88. # La función dibujarIm(mat) dibuja la imagen dada la
  89. # matriz que se le pasa como parámetro:
  90.  
  91. id = dibujarIm(mat)
  92.  
  93. # Borramos la imagen después de pulsar Return:
  94.  
  95. raw_input("Pulsa Return para borrar imagen: ")
  96. borrarIm(id)
  97.  
  98. a = reflexion_horizontal(mat)
  99. b = blanco_negro(mat)
  100. c = mitad_alto(mat)
  101.  
  102. opcion = menu()
  103. if  opcion == a:
  104.   reflexion_horizontal(mat)
  105.   if opcion == b:
  106.     blanco_negro(mat)
  107.   else:
  108.     mitad_alto(mat)
  109.  
  110. menu()

Última edición por AlvaroG; 18/10/2010 a las 11:34 Razón: coloreado de código
  #2 (permalink)  
Antiguo 16/10/2010, 10:34
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: como crear funcion de filtros para imagenes?

Si sugerencia usa 4 espacios en vez de 2.
Postea que tiene archivo tux78x70.txt (Olvidalo lo acabo de encontrar aquí)

Deberías de postear tus dudas y no simplemente dejar el código. Usa algún IDE para que te marque los errores que tienes.

Otra cosa haces llamadas a funciones que no están definidas. (o por lo menos no en python estándar)
  #3 (permalink)  
Antiguo 18/10/2010, 10:37
 
Fecha de Ingreso: abril-2010
Mensajes: 19
Antigüedad: 14 años
Puntos: 0
Respuesta: como crear funcion de filtros para imagenes?

hola Angel.. me podrias dar una mano con lo del iltro miad alto..?? no se como empezarlo.. desde ya muchas gracias.. :)
  #4 (permalink)  
Antiguo 18/10/2010, 19:28
vvv
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: como crear funcion de filtros para imagenes?

hola como isiste la filtraciones o todavia no he podido '????'
  #5 (permalink)  
Antiguo 20/10/2010, 00:01
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: como crear funcion de filtros para imagenes?

Hey de que trata el filtro 3? (Por que verdad no entendi lo que pedia, quieren matener la apariencia?, quieren que la corte a la mitad, quieren que la resize a la mitad de la altura)

Acabo de hacer el filtro 1 y 2 en 10 mins. De hecho me costo mas hacer correr pythong en debian que en hacer los filtros.

El filtro blanco negro es un filtro de negativo? (Cambiar blanco por negro y viceversa?)
  #6 (permalink)  
Antiguo 20/10/2010, 00:49
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: como crear funcion de filtros para imagenes?

Todo esto es asumiendo que tienen instaldo pythong y que saben trabajar con el.

moduloimagen.py
Código Python:
Ver original
  1. from modulepythong import *
  2. # -*- coding: iso-8859-15 -*-
  3. #
  4. # VERSION 1.1 (5-Noviembre-2003)
  5. #
  6. # AYUDA del módulo 'moduloimagen'. Define tres funciones,
  7. # que podemos utilizar de la siguiente forma:
  8. #
  9. # - matriz = leerIm(nombreFichero). Lee la imagen del fichero
  10. #   indicado y la devuelve como una matriz de enteros. Cada
  11. #   elemento de la matriz se corresponde con un pixel de la
  12. #   imagen.
  13. #
  14. # - id = dibujarIm(matriz). Se dibuja la imagen en la ventana
  15. #   gráfica. La imagen se escala automáticamente para ocupar toda
  16. #   la ventana gráfica. El valor devuelto por la función puede
  17. #   utilizarse para borrar la imagen con la función que se presenta
  18. #   a continuación.
  19. #
  20. # - borrarImagen(id). Borra la imagen identificada como 'id'.
  21. #
  22.  
  23. def _entero2color(n):
  24.   return '#'+('%02x'%n)*3
  25.  
  26. def leerIm(nombreFichero):
  27.   #lee imagen del fichero tux.txt
  28.   f=open(nombreFichero)
  29.   im1=f.read()
  30.   f.close()
  31.   #convierte datos en matriz
  32.   lin=im1.split('\n')
  33.   mat=[]
  34.   for l in lin:
  35.     if l=='': break
  36.     mat.append(map(int,l.split()))
  37.   return mat
  38.  
  39. def dibujarIm(mat):
  40.   filas=len(mat)
  41.   columnas=len(mat[0])
  42.   l=[]
  43.   xx1,yy1,xx2,yy2=window_coordinates()
  44.  
  45.   px=float(xx2-xx1)/columnas
  46.   py=float(yy2-yy1)/filas
  47.   for i in range(filas):
  48.     for j in range(columnas):
  49.       if mat[i][j]==-1:
  50.         col='#ffff00'
  51.       else:
  52.         col=_entero2color(mat[i][j])
  53.       x1=xx1+px*j
  54.       y1=yy2-py*(i+1)
  55.       x2=xx1+px*(j+1)
  56.       y2=yy2-py*i
  57.       l.append(create_filled_rectangle(x1,y1,x2,y2,col))
  58.   return l
  59.  
  60. def borrarIm(ind):
  61.   map(erase,ind)

main.py
Código Python:
Ver original
  1. #coding: utf-8
  2. from moduloimagen import *
  3.  
  4. def mostrar_dibujo(mat):
  5.     id = dibujarIm(mat)
  6.     raw_input("Presiona enter para continuar")
  7.     borrarIm(id)
  8.    
  9. def espejo(mat):
  10.     for row in mat:
  11.         row.reverse()
  12.    
  13. def negativo(mat):
  14.     rows = len(mat)
  15.     cols = len(mat[0])
  16.     for i in xrange(rows):
  17.         for j in xrange(cols):
  18.             mat[i][j] = 255 - mat[i][j]
  19.            
  20. def alto(mat):
  21.     mat = mat[0:len(mat)/2]
  22.    
  23. def transpuesta(mat):
  24.     rows = len(mat)
  25.     cols = len(mat[0])
  26.     mat = [[mat[j][i] for j in xrange(rows)] for i in xrange(cols)]
  27.  
  28. def vertical(mat):
  29.     mat.reverse()
  30.  
  31. def menu():
  32.     mensage = """
  33.    a) Reflexion horizontal
  34.    b) Blanco y negro (invertir)
  35.    c) Alto
  36.    d) Transpuesta
  37.    e) Reflexion vertical
  38.    cualquier otro: Salir
  39.    """
  40.  
  41.     mat = leerIm('tux78x70.txt')
  42.  
  43.     while True:
  44.         op = raw_input(mensage)
  45.         if op == 'a':
  46.             espejo(mat)
  47.         elif op == 'b':
  48.             negativo(mat)
  49.         elif op == 'c':
  50.             alto(mat)
  51.         elif op == 'd':
  52.             transpuesta(mat)
  53.         elif op == 'e':
  54.             vertical(mat)
  55.         else:
  56.             break
  57.         mostrar_dibujo(mat)
  58. menu()

Nota: Anexe una copia a su maestro.
  #7 (permalink)  
Antiguo 26/05/2011, 22:09
vvv
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: como crear funcion de filtros para imagenes?

hola yo no entiendo como hacer para ese programa filtro de persiana horizontal gracias si me pueden ayudar alguien

Etiquetas: filtros, funcion, imagenes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:02.