sábado, 28 de novembro de 2009

Problema 7.8

Estes problemas com imagens são todos muito parecidos. No caso da obtenção da versão a preto e branco, o mais relevante é sabermos que a imagem se obtém por comparação com um limiar. Esse limiar vai ser comparado com o valor na escala de cinzentos do pixel. Valores inferiores ficam preto (0,0,0), valores maiores ou iguais ficam brancos (255,255,255). Quanto ao mais é mais do mesmo: dois ciclos imbricados, criação da janela, transformação da imagem, posicionamento das imagens, desenho na tela e terminar.


import cImage

# 7.8
def preto_branco(imagem_fich, limiar):
""" Transforma para imagem a preto e branco."""

imagem = cImage.FileImage(imagem_fich)
largura = imagem.getWidth()
altura = imagem.getHeight()

nova_imagem=cImage.EmptyImage(largura,altura)

for coluna in range(largura):
for linha in range(altura):
pixel = imagem.getPixel(coluna,linha)
pixel_aux = pixel_cinzento(pixel)
if pixel_aux.getRed() < limiar :
novo_pixel = cImage.Pixel(0,0,0)
else:
novo_pixel = cImage.Pixel(255,255,255)
nova_imagem.setPixel(coluna,linha,novo_pixel)

return nova_imagem

def pixel_cinzento(pixel):
""" Converte um pixel para escala de cinzentos."""
vermelho = pixel.getRed()
verde = pixel.getGreen()
azul = pixel.getBlue()

int_media = (vermelho + verde + azul) / 3
novo_pixel = cImage.Pixel(int_media,int_media, int_media)
return novo_pixel

def main78(nome_fich,limiar):
# Prepara
imagem = cImage.FileImage(nome_fich)
largura = imagem.getWidth()
altura = imagem.getHeight()
# Converte
nova_imagem = preto_branco(nome_fich,limiar)
# Cria janela
janela = cImage.ImageWin('Preto e Branco',2*largura ,altura )
# Mostra
imagem.draw(janela)
nova_imagem.setPosition(largura,0)
nova_imagem.draw(janela)
# Termina
janela.exitOnClick()

if __name__ == '__main__':
main78('/tempo/imagens/duck3.jpg', 128)

Executando o código para a imagem e limiar dados, obtemos a imagem seguinte.



Sem comentários:

Enviar um comentário