Computação Gráfica: Transformações em Imagens Matriciais
De Aulas
Revisão de 15h00min de 15 de março de 2022 por Admin (discussão | contribs) (→Alteração de Dimensões)
Afluentes: Computação Gráfica
Transformações Geométricas
As transformações geométricas são operações de processamento de imagem para alterar a posição inicial dos seus píxels. Dentre algumas operações, temos ampliação, diminuição, espelhamento, rotação, distorção, etc.. Veremos alguns deles aqui.
Para nossos testes, iremos utilizar a imagem abaixo:
Alteração de Dimensões
1import sys
2import pygame
3
4
5# Retorna x e y equivalente da imagem original na destino
6def get_dest_xy(x_orig, y_orig, proportion):
7 x = int(proportion * x_orig / 100) # calcula a regra de tres de x
8 y = int(proportion * y_orig / 100) # calcula a regra de tres de y
9 return x, y
10
11
12# Retorna x e y equivalente da imagem destino na original
13def get_orig_xy(x_dest, y_dest, proportion):
14 p = 100 / (proportion / 100) # pega o percentual invertido
15 x = int(p * x_dest / 100) # calcula a regra de tres de x
16 y = int(p * y_dest / 100) # calcula a regra de tres de y
17 return x, y
18
19
20# Redimensiona a imagem
21def resize(image, surface, proportion):
22 # Para cada coluna da imagem de destino
23 for y in range(surface.get_height()):
24 # Para cada linha da imagem de destino
25 for x in range(surface.get_width()):
26 # pega o x e y relativo da imagem original
27 x2, y2 = get_orig_xy(x, y, proportion)
28 # e pinta na imagem de destino
29 surface.set_at((x, y), image.get_at((x2, y2)))
30
31
32# PROGRAMA PRINCIPAL
33pygame.init()
34
35file_in = sys.argv[1]
36file_out = sys.argv[2]
37proportion = int(sys.argv[3])
38
39image = pygame.image.load(file_in)
40w = image.get_width()
41h = image.get_height()
42sw, sh = get_dest_xy(w, h, proportion)
43
44# cria a surface com a proporção a ser alterada
45surface = pygame.display.set_mode((sw, sh))
46
47# chama a função pra redimensionar
48resize(image, surface, proportion)
49
50# salva a surface como nova imagem
51pygame.image.save(surface, file_out)
52
53pygame.display.set_caption(file_in)
54
55finish = False
56while not finish:
57 for event in pygame.event.get():
58 if event.type == pygame.QUIT:
59 finish = True
60 elif event.type == pygame.KEYDOWN:
61 if event.key == pygame.K_ESCAPE:
62 finish = True
63 pygame.display.update()
64pygame.quit()
65quit()
- Exemplo de execução
python3.9 resize.py imagem.jpg out.jpg 120
O exemplo aumenta a imagem em 20% da original (imagem.jpg), criando uma imagem resultado chamada out.jpg.