segunda-feira, 23 de novembro de 2009

Imagens

Na aula teórica estudámos o módulo cImage, que permite algumas manipulações simples de imagens. Explorámos mais tarde nas aulas TP as capacidades do módulo em resolver alguns dos problemas normais que queremos resolver com imagens. Este pequeno exemplo pretende apenas chamar a atenção para os três aspectos (fases) envolvidos na manipulação de imagens:


(1): criação de uma janela

(2): obtenção/criação de imagens

(3): colocação das imagens na janela e sua visualização


Vejamos então o exemplo.

import cImage

def mostra_imagem(imagem,pos,janela):
"""
Mostra imagem numa dada posição da janela.
"""
imagem.setPosition(pos[0],pos[1])
imagem.draw(janela)

def cria_imagem(largura,altura, r,g,b):
“””
Cria imagem a partir de nada...
“””
imagem = cImage.EmptyImage(largura,altura)
pixel = cImage.Pixel(r,g,b)
for coluna in range(largura):
for linha in range(altura):
imagem.setPixel(coluna,linha,pixel)
return imagem

def main(largura,altura):
“”” As três fases.”””
# Cria janela
janela = cImage.ImageWin('Toto',largura,altura)
# Cria imagem
imagem = cria_imagem(largura/3,altura/2,255,0,0)
# Coloca imagem na janela e mostra
mostra_imagem(imagem,(50,100),janela)
janela.exitOnClick()

if __name__=='__main__':
main(600,400)

Analisemos o programa. Comecemos pela definição main. Ela faz o papel do nosso programa principal. Estão claramente identificadas as três fases acima referidas. Para definir a janela temos que lhe dar um nome (‘Toto’ neste caso) e as suas dimensões (largura e altura). De seguida, a definição cria_imagem é responsável por criar uma imagem simples, em que todos os pixeis são da mesma cor (r,g,b). Note-se como se cria um pixel (linha 15). Não basta indicar um tuplo com os valores das intensidades nos três canais de cor! Outro aspecto importante é o facto de estarmos a lidar com imagens 2D. Isso significa que cada pixel vai ser identificado pelas suas coordenadas em largura e em altura. Como se fosse uma matriz. Assim, navegar por uma imagem, seja para criar, analisar ou modificar, obriga, regra geral, a dois ciclos for, um dentro do outro (linhas 16-18). Ver a imagem obriga a duas coisas: definir a posição onde a imagem vai ser colocada, através da identificação explícita do seu canto superior esquerdo (linha 7 ) e, a seguir mandar desenhar (linha 8 ).
Executando este programa o resultado é a imagem que se pode ver abaixo.


Sem comentários:

Enviar um comentário