Ver Mensaje Individual
  #6 (permalink)  
Antiguo 20/10/2010, 00:49
Avatar de razpeitia
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.