Ver Mensaje Individual
  #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