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.

01.import cImage
02. 
03.# 7.8
04.def preto_branco(imagem_fich, limiar):
05.    """ Transforma para imagem a preto e branco."""
06. 
07.    imagem = cImage.FileImage(imagem_fich)
08.    largura = imagem.getWidth()
09.    altura = imagem.getHeight()
10.    
11.    nova_imagem=cImage.EmptyImage(largura,altura)
12.     
13.    for coluna in range(largura):
14.        for linha in range(altura):
15.            pixel = imagem.getPixel(coluna,linha)
16.            pixel_aux = pixel_cinzento(pixel)
17.            if pixel_aux.getRed() < limiar :
18.                novo_pixel = cImage.Pixel(0,0,0)
19.            else:
20.                novo_pixel = cImage.Pixel(255,255,255)
21.            nova_imagem.setPixel(coluna,linha,novo_pixel)
22. 
23.    return nova_imagem
24.     
25.def pixel_cinzento(pixel):
26.    """ Converte um pixel para escala de cinzentos."""
27.    vermelho = pixel.getRed()
28.    verde = pixel.getGreen()
29.    azul = pixel.getBlue()
30.     
31.    int_media = (vermelho + verde + azul) / 3
32.    novo_pixel = cImage.Pixel(int_media,int_media, int_media)
33.    return novo_pixel
34. 
35.def main78(nome_fich,limiar):
36.    # Prepara
37.    imagem = cImage.FileImage(nome_fich)
38.    largura = imagem.getWidth()
39.    altura = imagem.getHeight()
40.    # Converte
41.    nova_imagem = preto_branco(nome_fich,limiar)
42.    # Cria janela
43.    janela = cImage.ImageWin('Preto e Branco',2*largura ,altura )
44.    # Mostra
45.    imagem.draw(janela)
46.    nova_imagem.setPosition(largura,0)
47.    nova_imagem.draw(janela)
48.    # Termina
49.    janela.exitOnClick()
50. 
51.if __name__ == '__main__':
52.    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