Estas son las imágenes que utilice antes de aplicarles la escala de grises y umbrales:
Y aplicándoles la escala de grises obtenemos lo siguiente:
El algoritmo que utilice para realizar esto fue:
- Recorrer la imagen pixel por pixel para obtener su r, g, b
- Una vez realizado eso obtuve un promedio de los tres (r+g+b)/3
- Y por ultimo asigne ese promedio a r, g, b.
Ahora este es el codigo que realice:
**
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
import Image #esto para trabajar con imagenes | |
import sys | |
import pygame | |
#cargamos y abrimos imagen | |
def imagen(): | |
img = Image.open("dori.jpg") | |
ancho,alto = img.size | |
img = eg(img,ancho,alto) | |
return img, ancho, alto | |
#Trabajamos la imagen y sacamos el promedio de rgb | |
def eg(img,ancho,alto): | |
pixeles = img.load() | |
imageng = 'dori.jpg' | |
for i in range (ancho): | |
for j in range(alto): | |
(r,g,b)= img.getpixel((i,j)) | |
prom = int((r+g+b)/3) | |
pixeles[i,j] = (prom,prom,prom) | |
img.save(imageng) | |
return imageng | |
def main (): | |
pygame.init() | |
#pygame.display.set_caption("Ventana") | |
r,ancho,alto = imagen() | |
screen = pygame.display.set_mode((ancho,alto)) | |
pygame.display.set_caption("Ventana") | |
im = pygame.image.load(r) | |
while True: | |
for event in pygame.event.get(): | |
if event.type == pygame.QUIT: | |
sys.exit(0) | |
screen.blit(im,(0,0)) | |
pygame.display.update() | |
return 0 | |
main() |
**
La primer imagen también la utilice para aplicar umbrales y este fue el resultado:
![]() |
A esta imagen le aplique un mínimo de 10 y un máximo de 112 en los umbrales |
Para estas imágenes el mínimo fue de 120 y el máximo de 210
Para estas imágenes el mínimo es de 100 y el máximo de 200
El algoritmo que utilice para esto es sencillo y en base a lo que anteriormente tenia para la escala de grises solo agregue lo siguiente:
- Fijar un mínimo y un máximo para los umbrales
- Comparar el promedio que se obtenía con el rgb y si es menor que el mínimo que se asigno igualamos el promedio a 0 y si el promedio es mayor se iguala a 255.(blanco-negro)
- Después igualamos rgb =(prom,prom,prom) para obtener el color del pixel
Y este es 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
import Image #esto para trabajar con imagenes | |
import sys | |
import pygame | |
#definimos minimos y maximos para los umbrales | |
minimo = 100 | |
maximo = 200 | |
#cargamos y abrimos imagen | |
def imagen(): | |
img = Image.open("imagen3.jpg") | |
ancho,alto = img.size | |
img = eg(img,ancho,alto) | |
return img, ancho, alto | |
def eg(img,ancho,alto): | |
pixeles = img.load() | |
imageng = 'img3_umb.bmp' | |
for i in range (ancho): | |
for j in range(alto): | |
(r,g,b)= img.getpixel((i,j)) | |
prom = int((r+g+b)/3) | |
#Aqui agregamos umbrales | |
if prom <= minimo: | |
prom =0 | |
if prom >= maximo: | |
prom = 255 | |
pixeles[i,j] = (prom,prom,prom) | |
img.save(imageng) | |
return imageng | |
def main (): | |
pygame.init() | |
#pygame.display.set_caption("Ventana") | |
r,ancho,alto = imagen() | |
screen = pygame.display.set_mode((ancho,alto)) | |
pygame.display.set_caption("Ventana") | |
im = pygame.image.load(r) | |
while True: | |
for event in pygame.event.get(): | |
if event.type == pygame.QUIT: | |
sys.exit(0) | |
screen.blit(im,(0,0)) | |
pygame.display.update() | |
return 0 | |
main() |
**
Y aquí les dejo la liga a mi repositorio.
Sería bueno poner lo de umbrales en su propia subrutina para poder ser llamado independientemente y no solamente como parte de la conversión. Cuida la redacción en términos de gramática y ortografía. Van 7 pts por la primera actividad.
ResponderEliminar