SlideShare uma empresa Scribd logo
Computação Gráfica em




       Luiz Eduardo Borges
  http://ark4n.wordpress.com/
Sumário
●   Computação gráfica
●   Imagens em 2D
●   Processamento de
    imagens
●   Modelagem 3D
●   Animação




                         Foto alterada com o filtro
                             Cubism do GIMP.
Computação gráfica
Definições:
●   Área da ciência da
    computação que estuda
    a geração e manipulação
    de conteúdo visual.
●   Tecnologias associadas a
    criação e manipulação
    de imagens digitais.
●   Representação e
    manipulação de dados
    visuais usando                 Cena 3D renderizada no
                                          Blender.
    computadores.
Imagens em 2D (raster)
                                            A imagem é composta por pixels
                                           (picture elements), com uma cor
                                                       associada.
          RGB = (102, 153, 102)
                                  Imagem


                                                  RGB = (102, 153, 204)



  RGB = (102, 153, 153)




Geralmente, as cores dos pixels
são representadas em RGB (Red,                RGB = (51, 102, 153)
         Blue, Green).
Processamento de imagem

   Imagem original em um
formato raster (mapa de bits).




                 Algoritmos




                    Imagem processada (filtro
                    GIMPressionist / Mossy, do
                             GIMP).
PIL (Python Imaging Library)
Implementa:
●   Ferramentas para cortar, redimensionar e mesclar
    imagens.
●   Algoritmos de conversão.
●   Filtros, tais como suavizar e detectar bordas.
●   Ajustes, incluindo brilho e contraste.
●   Operações com paletas de cores.
●   Desenhos simples em 2D.
●   Rotinas para tratamento de imagens: equalizar,
    deformar, inverter e outras.
PIL (exemplo A-I)
import Image
                                                    O módulo Image define uma
from ImageFilter import *
                                                  classe para tratar imagens com
fn = 'for.png'                                    vários métodos para modificar
im = Image.open(fn)                                     suas características.

for i, filter in enumerate((CONTOUR,
   EMBOSS, FIND_EDGES)):
   fl = im.filter(filter)
   fl.thumbnail((512, 512),                        O módulo ImageFilter provê
       Image.ANTIALIAS)                             filtros mais comuns para o
   fl.save(fn.replace('.png', '%d.png' % i),       processamento de imagens.
       'PNG')

pn = im.point(lambda i: i * 3)
pn.thumbnail((512, 512), Image.ANTIALIAS)
pn.save(fn.replace('.png', '%d.png' % (i + 1)),
  'PNG')
PIL (exemplo A-II)
import Image                                      A função open() cria objetos da
from ImageFilter import *                             classe Image a partir de
                                                   arquivos. Vários formatos são
fn = 'for.png'
                                                            suportados.
im = Image.open(fn)

for i, filter in enumerate((CONTOUR,                 Os filtros CONTOUR,
   EMBOSS, FIND_EDGES)):                           EMBOSS e FIND_EDGES são
   fl = im.filter(filter)                      alguns que estão disponíveis em
   fl.thumbnail((512, 512),                              ImageFilter.
       Image.ANTIALIAS)
   fl.save(fn.replace('.png', '%d.png' % i),
       'PNG')
                                               O método filter() aplica o filtro
                                                  especificado na imagem.
pn = im.point(lambda i: i * 3)
pn.thumbnail((512, 512), Image.ANTIALIAS)
pn.save(fn.replace('.png', '%d.png' % (i + 1)),
  'PNG')
PIL (exemplo A-III)
import Image
from ImageFilter import *

fn = 'for.png'                                        O método thumbnail()
im = Image.open(fn)                               redimenciona a imagem. Com
                                                  antialias, a imagem resultante
for i, filter in enumerate((CONTOUR,                      fica mais suave.
   EMBOSS, FIND_EDGES)):
   fl = im.filter(filter)                      O método save() grava a imagem
   fl.thumbnail((512, 512),                        em arquivo no formato
       Image.ANTIALIAS)                                especificado.
   fl.save(fn.replace('.png', '%d.png' % i),
       'PNG')
                                                 O método point() aplica uma
pn = im.point(lambda i: i * 3)                 função a cada ponto da imagem.
pn.thumbnail((512, 512), Image.ANTIALIAS)
pn.save(fn.replace('.png', '%d.png' % (i + 1)),
  'PNG')
PIL (exemplo A-IV)

                 Arquivos de saída

CONTOUR    EMBOSS             FIND_EDGES    lamdba i: i *3




for0.png   for1.png            for2.png       for3.png
Imagens em 2D (vetorial)
                                     A imagem é gerada a partir de
                                      instruções que descrevem os
                                                objetos.




 As instruções são primitivas
geométricas, tais como linha,               Arquivo SVG gerado no
   ponto, círculo e outros.                       Inkscape.
Pylab / Matplotlib
Implementa:
●   Pylab: API destinada ao uso interativo.
●   Matplotib: API orientada a objetos.
●   Vários gráficos 2D mais usados: linhas, barras, pizza,
    dispersão e outros.
●   Suporte a gráficos 3D (limitado).
●   Vários backends, que permitem exportar para vários
    formatos populares.
Pylab / Matplotlib (exemplo B-I)
                                            A função subplot() divide e
from pylab import *                      seleciona um pedaço da área da
ent = arange(0., 20.1, .1)               figura (311 => 3 linhas, 1 coluna,
                                               na primeira posição).
subplot(311)
sai = cos(ent)
plot(ent, sai, lw=3, c=(.1, .25, .5))      A função plot() desenha uma
ylabel('A')                                           linha.

subplot(312)
sai = sin(ent)
                                               Texto para o eixo Y.
plot(ent, sai, lw=3, c=(.1, .5, .25))
ylabel('B')

subplot(313)
sai = cos(ent) * sin(ent)
plot(ent, sai, lw=3, c=(.1, .5, .5))           Texto para o eixo X.
xlabel('entrada')
ylabel('A x B')
                                         Salva a imagem em arquivo PNG.
savefig('graf.png', dpi=100)
Pylab / Matplotlib (exemplo B-II)

from pylab import *                       Arquivo de saída
ent = arange(0., 20.1, .1)

subplot(311)            A
sai = cos(ent)
plot(ent, sai, lw=3, c=(.1, .25, .5))
ylabel('A')

subplot(312)            B
sai = sin(ent)
plot(ent, sai, lw=3, c=(.1, .5, .25))
ylabel('B')
                      AxB
subplot(313)
sai = cos(ent) * sin(ent)
plot(ent, sai, lw=3, c=(.1, .5, .5))
xlabel('entrada')
ylabel('A x B')                               graf.png

savefig('graf.png', dpi=100)
3D (I)

             Wireframe        Materiais




O wireframe representa a
                            Os materiais são aplicados
estrutura dos objetos que
                                  aos objetos.
    compõem a cena.
3D (II)

               Shading          Texturas




Sombreamento define como     Texturas são imagens raster
 cada objeto da cena reage      que são aplicadas aos
           a luz.                     materiais.
3D (III)




                         Texturas

 Sombras




  A imagem é gerada
aplicando um algoritmo
 (como o raytracing),      Reflexão
que calcula cada ponto
       da saída.
Animação (técnica keyframe)

Keyframe 1                             Keyframe 2




001                      025           050

                         Keyframe 3




 075                     100           125

 Os frames entre os keyframes
são calculador por interpolação.
VPython
Implementa:
●   Vários objetos 3D simples (cubo, esfera, cilindro,
    pirâmide, espiral, ...).
●   Recursos para facilitar animações.
●   Iluminação, zoom e pan automáticos.
●   Controles interativos.
VPython (exemplo C-I)
                                                     Desenha quatro caixas.
from visual import *

box(pos=(12, 0, 0) , length=1 , height=21 , width=29)
box(pos=(-12, 0, 0) , length=1 , height=21 , width=29)
box(pos=(0, 10, 0) , length=25 , height= 1 , width=29)
box(pos=(0, -10, 0) , length=25 , height=1 , width=29)

x, y, z = .1, .1, .1                              Desenha a esfera e sombra.
b = sphere(pos=(3, 5, 7), radius=1.2)
s = cylinder(pos=(3, -10, 7), axis=(0, .5, 0), color=color.black)

while True:                                        Move a esfera e a sombra.
  b.pos += (x, y, z)
  s.x, s.z = b.x, b.z                            Muda a direção da esfera e da
  if abs(b.x) > 10: x = -x                                 sombra.
  if abs(b.y) > 8: y = -y
  if abs(b.z) > 12: z = -z
  rate(100)                                         Controla a velocidade da
                                                           animação.
VPython (exemplo C-II)
         Janela de saída




Caixas




                                      Esfera b




                           Sombra s
Blender
Implementa:
●   Modelagem 3D avançada, com materiais, texturas,
    iluminação, extrusão, entre outros.
●   Recursos de animação sofisticados.
●   Um game engine poderoso.
●   Uma API que permite uso do Python.
Blender (cena)

          Fonte de luz




                                Câmera




Objetos
Blender (exemplo D-I)

import math
import Blender
                                                      Câmera
# A cena atual
cena = Blender.Scene.GetCurrent()

# Muda a camera de lugar
camera = Blender.Object.Get()[0]
camera.setLocation(9., -9., 7.)

# Remove da cena o objeto quot;defaultquot;
cubo = Blender.Object.Get()[1]
cena.objects.unlink(cubo)

# Cria uma fonte de luz
lampada = Blender.Lamp.New('Lamp')
lamp = Blender.Object.New('Lamp')

# Muda o lugar da fonte (default = 0.0, 0.0, 0.0)
lamp.setLocation(6., -6., 6.)
                                                      Continua...
Blender (exemplo D-II)

# quot;Prendequot; a fonte de luz na cena                 Fonte de luz
lamp.link(lampada)
cena.objects.link(lamp)

# Cria um material
material1 = Blender.Material.New('newMat1')
material1.rgbCol = [.25, .25, .32]
material1.setAlpha(1.)

# Cria uma textura
textura1 = Blender.Texture.Get()[0]
textura1.setType('Clouds')
textura1.noiseType = 'hard'

# Coloca no material
material1.setTexture(0, textura1)
mtex = material1.getTextures()[0]
mtex.col = (.18, .18, .22)


                                                   Continua...
Blender (exemplo D-III)

# Cria o piso
mesh = Blender.Mesh.Primitives.Plane(25.)
piso = cena.objects.new(mesh,'Mesh')
piso.setEuler(0., 0., math.radians(45))

# Coloca o material no piso
piso.setMaterials([material1])
piso.colbits = 1

# Cria outro material
material2 = Blender.Material.New('newMat2')
material2.rgbCol = [.52, .61, .62]
material2.setAlpha(1.)

# Cria outra textura
textura2 = Blender.Texture.Get()[0]                    Piso
textura2.setType('Stucci')
textura2.noiseType = 'hard'


                                                   Continua...
Blender (exemplo D-IV)

# Coloca no material
material2.setTexture(0, textura2)
mtex = material2.getTextures()[0]
mtex.col = (.22, .22, .32)

# Cria objetos na cena
def objeto(local, tam, mat, prim=Blender.Mesh.Primitives.Cube):

  mesh = prim()
  obj = cena.objects.new(mesh, 'Mesh')
  obj.setLocation(*local)
  obj.size = tam
  obj.setMaterials(mat)
  obj.colbits = 1
  return obj

mat = [material2]




                                                          Continua...
Blender (exemplo D-V)

# Primitiva do cilindro
prim = Blender.Mesh.Primitives.Cylinder

# Cria colunas no fundo
for i in xrange(16):

  # Topo da primeira fileira
  local = (i - 8., 8., 2.5)
  tam = (.25, .25, .1)
  objeto(local, tam, mat)

  # Base da primeira fileira
  local = (i - 8., 8., 0.)
  objeto(local, tam, mat)

  # Corpo da primeira fileira                          Colunas
  tam = (.2, .2, 2.5)
  objeto(local, tam, mat, prim)


                                                     Continua...
Blender (exemplo D-VI)
# Topo da segunda fileira                   Aqueduto
local = (-8., i - 8., 2.5)
tam = (.25, .25, .1)
objeto(local, tam, mat)

# Base da segunda fileira
local = (-8., i - 8., 0.)
objeto(local, tam, mat)

# Corpo da segunda fileira
tam = .2, .2, 2.5
objeto(local, tam, mat, prim)

# Aqueduto
local = (-8., i - 8., 3.)
tam = (.5, .5, .5)
objeto(local, tam, mat)

local = (i - 8., 8., 3.)
objeto(local, tam, mat)

                                            Continua...
Blender (exemplo D-VII)

# Cria colunas em cima do piso
for i in (-3, 3):
   for j in range(-3, 4):

     # Topo das fileiras X
     local = (i, j, 2.5)
     tam = (.25, .25, .1)
     objeto(local, tam, mat)

     # Topo das fileiras Y
     local = (j, i, 2.5)
     objeto(local, tam, mat)

     # Base das fileiras X
     local = (i, j, .5)
     objeto(local, tam, mat)
                                                  Colunas




                                              Continua...
Blender (exemplo D-VIII)

     # Base das fileiras Y
     local = (j, i, .5)
     objeto(local, tam, mat)

     # Corpo das fileiras X
     local = (i, j, 0)
     tam = (.2, .2, 2.5)
     objeto(local, tam, mat, prim)

     # Corpo das fileiras Y
     local = (j, i, 0)
     objeto(local, tam, mat, prim)

# Cria escada
for i in xrange(4):
                                                           Escada
  local = (0., 0., i / 16.)
  tam = (2. + (8. - i) / 4.,2. + (8. - i) / 4., .25)
  objeto(local, tam, mat)

                                                       Continua...
Blender (exemplo D-IX)

# Cria teto
for i in xrange(35):

  local = (0., 0., 2.7 + i / 60.)
  tam = (3.5 , 3.5 * ( 1. - i / 35.), .1)
  objeto(local, tam, mat)

# Atualiza a cena
cena.update()




                                                           Teto
Blender (exemplo D-X)




         Cena final
Referências
PIL:
●   http://www.pythonware.com/products/pil/
Matplotlib:
●   http://matplotlib.sourceforge.net/
VPython:
●
    http://vpython.org/
Blender:
●
    http://www.blender.org/
Computação Gráfica em




       Luiz Eduardo Borges
  http://ark4n.wordpress.com/

             Fim

Mais conteúdo relacionado

Mais procurados

Metodologia para Projeto de Design
Metodologia para Projeto de DesignMetodologia para Projeto de Design
Metodologia para Projeto de Design
Marcio Duarte
 
Programa disciplina Comunicação Gráfica e Audiovisual
Programa disciplina Comunicação Gráfica e AudiovisualPrograma disciplina Comunicação Gráfica e Audiovisual
Programa disciplina Comunicação Gráfica e AudiovisualCarina Lopes
 
REGRAS DOS SINAIS
REGRAS DOS SINAISREGRAS DOS SINAIS
REGRAS DOS SINAIS
Jonasblog
 
07 Modelagem de banco de dados: Modelo Físico
07 Modelagem de banco de dados: Modelo Físico07 Modelagem de banco de dados: Modelo Físico
07 Modelagem de banco de dados: Modelo Físico
Centro Paula Souza
 
Sistema acadêmico
Sistema acadêmicoSistema acadêmico
Sistema acadêmico
Leinylson Fontinele
 
Geometria analitica equacao da reta
Geometria analitica equacao da retaGeometria analitica equacao da reta
Geometria analitica equacao da retacon_seguir
 
Aula 6 - Ataques de Negação de Serviço (DoS e D-DoS)
Aula 6 - Ataques de Negação de Serviço (DoS e D-DoS)Aula 6 - Ataques de Negação de Serviço (DoS e D-DoS)
Aula 6 - Ataques de Negação de Serviço (DoS e D-DoS)
Carlos Henrique Martins da Silva
 
Introdução ao Java Swing (Interface)
Introdução ao Java Swing (Interface)Introdução ao Java Swing (Interface)
Introdução ao Java Swing (Interface)Sérgio Souza Costa
 
Design de Interação - Capítulo 8 - Design, Prototipação e Construção -
Design de Interação - Capítulo 8 - Design, Prototipação e Construção - Design de Interação - Capítulo 8 - Design, Prototipação e Construção -
Design de Interação - Capítulo 8 - Design, Prototipação e Construção -
Pedro de Vasconcellos
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos
Centro Paula Souza
 
Soluções de IoT usando Arduino e Google Cloud
Soluções de IoT usando Arduino e Google CloudSoluções de IoT usando Arduino e Google Cloud
Soluções de IoT usando Arduino e Google Cloud
Alvaro Viebrantz
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetossoncino
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
Daniel Maia
 
Introdução a Banco de Dados (Parte 2)
Introdução a Banco de Dados (Parte 2)Introdução a Banco de Dados (Parte 2)
Introdução a Banco de Dados (Parte 2)
Mario Sergio
 
Cálculo Numérico - Aula 02: Introdução ao SCILAB
Cálculo Numérico - Aula 02: Introdução ao SCILABCálculo Numérico - Aula 02: Introdução ao SCILAB
Cálculo Numérico - Aula 02: Introdução ao SCILABRodolfo Almeida
 
Matemática Computacional
Matemática ComputacionalMatemática Computacional
Matemática Computacional
Ricardo Terra
 
Conjuntos
ConjuntosConjuntos
Conjuntos
mendel1b2010
 
Estatística aplicada à gestão empresarial
Estatística aplicada à gestão empresarialEstatística aplicada à gestão empresarial
Estatística aplicada à gestão empresarial
Adriano Bruni
 
O vértice da parábola da função do 2 grau
O vértice da parábola da função do 2 grauO vértice da parábola da função do 2 grau
O vértice da parábola da função do 2 grau
Newton Sérgio Lima
 

Mais procurados (20)

Metodologia para Projeto de Design
Metodologia para Projeto de DesignMetodologia para Projeto de Design
Metodologia para Projeto de Design
 
Programa disciplina Comunicação Gráfica e Audiovisual
Programa disciplina Comunicação Gráfica e AudiovisualPrograma disciplina Comunicação Gráfica e Audiovisual
Programa disciplina Comunicação Gráfica e Audiovisual
 
REGRAS DOS SINAIS
REGRAS DOS SINAISREGRAS DOS SINAIS
REGRAS DOS SINAIS
 
07 Modelagem de banco de dados: Modelo Físico
07 Modelagem de banco de dados: Modelo Físico07 Modelagem de banco de dados: Modelo Físico
07 Modelagem de banco de dados: Modelo Físico
 
Sistema acadêmico
Sistema acadêmicoSistema acadêmico
Sistema acadêmico
 
Geometria analitica equacao da reta
Geometria analitica equacao da retaGeometria analitica equacao da reta
Geometria analitica equacao da reta
 
Aula 6 - Ataques de Negação de Serviço (DoS e D-DoS)
Aula 6 - Ataques de Negação de Serviço (DoS e D-DoS)Aula 6 - Ataques de Negação de Serviço (DoS e D-DoS)
Aula 6 - Ataques de Negação de Serviço (DoS e D-DoS)
 
Introdução ao Java Swing (Interface)
Introdução ao Java Swing (Interface)Introdução ao Java Swing (Interface)
Introdução ao Java Swing (Interface)
 
Design de Interação - Capítulo 8 - Design, Prototipação e Construção -
Design de Interação - Capítulo 8 - Design, Prototipação e Construção - Design de Interação - Capítulo 8 - Design, Prototipação e Construção -
Design de Interação - Capítulo 8 - Design, Prototipação e Construção -
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos
 
Soluções de IoT usando Arduino e Google Cloud
Soluções de IoT usando Arduino e Google CloudSoluções de IoT usando Arduino e Google Cloud
Soluções de IoT usando Arduino e Google Cloud
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetos
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Ponto MáXimo E Ponto MíNimo
Ponto MáXimo E Ponto MíNimoPonto MáXimo E Ponto MíNimo
Ponto MáXimo E Ponto MíNimo
 
Introdução a Banco de Dados (Parte 2)
Introdução a Banco de Dados (Parte 2)Introdução a Banco de Dados (Parte 2)
Introdução a Banco de Dados (Parte 2)
 
Cálculo Numérico - Aula 02: Introdução ao SCILAB
Cálculo Numérico - Aula 02: Introdução ao SCILABCálculo Numérico - Aula 02: Introdução ao SCILAB
Cálculo Numérico - Aula 02: Introdução ao SCILAB
 
Matemática Computacional
Matemática ComputacionalMatemática Computacional
Matemática Computacional
 
Conjuntos
ConjuntosConjuntos
Conjuntos
 
Estatística aplicada à gestão empresarial
Estatística aplicada à gestão empresarialEstatística aplicada à gestão empresarial
Estatística aplicada à gestão empresarial
 
O vértice da parábola da função do 2 grau
O vértice da parábola da função do 2 grauO vértice da parábola da função do 2 grau
O vértice da parábola da função do 2 grau
 

Destaque

3D Computer Graphics with Python
3D Computer Graphics with Python3D Computer Graphics with Python
3D Computer Graphics with Python
Martin Christen
 
Computação gráfica
Computação gráficaComputação gráfica
Computação gráfica
Paulo Henrique
 
Redes Neurais e Python
Redes Neurais e PythonRedes Neurais e Python
Redes Neurais e Python
pugpe
 
Compilando e Usando OpenCV v. 3.0.0
Compilando e Usando OpenCV v. 3.0.0Compilando e Usando OpenCV v. 3.0.0
Compilando e Usando OpenCV v. 3.0.0
André Moreira
 
Aula 16 - Modularização - parte 3 - exercícios
Aula 16 - Modularização - parte 3 - exercíciosAula 16 - Modularização - parte 3 - exercícios
Aula 16 - Modularização - parte 3 - exercíciosPacc UAB
 
Processamento Digital de Imagens - Fundamentos e Aplicações
Processamento Digital de Imagens - Fundamentos e AplicaçõesProcessamento Digital de Imagens - Fundamentos e Aplicações
Processamento Digital de Imagens - Fundamentos e AplicaçõesAldisio Medeiros
 
Python e Aprendizagem de Máquina (Inteligência Artificial)
Python e Aprendizagem de Máquina (Inteligência Artificial)Python e Aprendizagem de Máquina (Inteligência Artificial)
Python e Aprendizagem de Máquina (Inteligência Artificial)
Marcel Caraciolo
 

Destaque (7)

3D Computer Graphics with Python
3D Computer Graphics with Python3D Computer Graphics with Python
3D Computer Graphics with Python
 
Computação gráfica
Computação gráficaComputação gráfica
Computação gráfica
 
Redes Neurais e Python
Redes Neurais e PythonRedes Neurais e Python
Redes Neurais e Python
 
Compilando e Usando OpenCV v. 3.0.0
Compilando e Usando OpenCV v. 3.0.0Compilando e Usando OpenCV v. 3.0.0
Compilando e Usando OpenCV v. 3.0.0
 
Aula 16 - Modularização - parte 3 - exercícios
Aula 16 - Modularização - parte 3 - exercíciosAula 16 - Modularização - parte 3 - exercícios
Aula 16 - Modularização - parte 3 - exercícios
 
Processamento Digital de Imagens - Fundamentos e Aplicações
Processamento Digital de Imagens - Fundamentos e AplicaçõesProcessamento Digital de Imagens - Fundamentos e Aplicações
Processamento Digital de Imagens - Fundamentos e Aplicações
 
Python e Aprendizagem de Máquina (Inteligência Artificial)
Python e Aprendizagem de Máquina (Inteligência Artificial)Python e Aprendizagem de Máquina (Inteligência Artificial)
Python e Aprendizagem de Máquina (Inteligência Artificial)
 

Semelhante a Computação Gráfica em Python

Computacao grafica python v2
Computacao grafica python v2Computacao grafica python v2
Computacao grafica python v2Jean Lopes
 
Pil e segmentacao automatica de vídeo
Pil e segmentacao automatica de vídeoPil e segmentacao automatica de vídeo
Pil e segmentacao automatica de vídeowhanderley freitas
 
Minicurso pygame
Minicurso pygameMinicurso pygame
Minicurso pygame
Demontiê Junior
 
11477 41952-1-pb
11477 41952-1-pb11477 41952-1-pb
11477 41952-1-pb
Claudecir Garcia Martins
 
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
PotiLivre Sobrenome
 
Sbc scipy
Sbc scipySbc scipy
Sbc scipy
Silas Santiago
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web designViniciusGuedes
 
Atividade De Web Design
Atividade De Web DesignAtividade De Web Design
Atividade De Web DesignViniciusGuedes
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web designViniciusGuedes
 
Desktop publishing
Desktop publishingDesktop publishing
Desktop publishing
UNESP
 
Aplicando camadas de processamento durante o Aumento Sintético de uma base de...
Aplicando camadas de processamento durante o Aumento Sintético de uma base de...Aplicando camadas de processamento durante o Aumento Sintético de uma base de...
Aplicando camadas de processamento durante o Aumento Sintético de uma base de...
Fernando Feltrin
 
RADIOLOGIA DIGITAL
RADIOLOGIA DIGITALRADIOLOGIA DIGITAL
Trabalho em greenfoot
Trabalho em greenfootTrabalho em greenfoot
Trabalho em greenfoot
Vitor Faria
 
Bitmap x Vetor
Bitmap x VetorBitmap x Vetor
Bitmap x Vetor
Daniel Brandão
 
Trabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESC
Trabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESCTrabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESC
Trabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESC
Juliano Tiago Rinaldi
 
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Opencadd Advanced Technology
 
Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009
Ialis Cavalcante
 
Aula 17
Aula   17Aula   17
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web designvictorgarcez
 

Semelhante a Computação Gráfica em Python (20)

Computacao grafica python v2
Computacao grafica python v2Computacao grafica python v2
Computacao grafica python v2
 
Pil e segmentacao automatica de vídeo
Pil e segmentacao automatica de vídeoPil e segmentacao automatica de vídeo
Pil e segmentacao automatica de vídeo
 
Minicurso pygame
Minicurso pygameMinicurso pygame
Minicurso pygame
 
11477 41952-1-pb
11477 41952-1-pb11477 41952-1-pb
11477 41952-1-pb
 
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
 
Sbc scipy
Sbc scipySbc scipy
Sbc scipy
 
Sbc scipy
Sbc scipySbc scipy
Sbc scipy
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web design
 
Atividade De Web Design
Atividade De Web DesignAtividade De Web Design
Atividade De Web Design
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web design
 
Desktop publishing
Desktop publishingDesktop publishing
Desktop publishing
 
Aplicando camadas de processamento durante o Aumento Sintético de uma base de...
Aplicando camadas de processamento durante o Aumento Sintético de uma base de...Aplicando camadas de processamento durante o Aumento Sintético de uma base de...
Aplicando camadas de processamento durante o Aumento Sintético de uma base de...
 
RADIOLOGIA DIGITAL
RADIOLOGIA DIGITALRADIOLOGIA DIGITAL
RADIOLOGIA DIGITAL
 
Trabalho em greenfoot
Trabalho em greenfootTrabalho em greenfoot
Trabalho em greenfoot
 
Bitmap x Vetor
Bitmap x VetorBitmap x Vetor
Bitmap x Vetor
 
Trabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESC
Trabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESCTrabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESC
Trabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESC
 
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
 
Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009
 
Aula 17
Aula   17Aula   17
Aula 17
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web design
 

Mais de gsroma

Python Pythononcampus Uva 060609
Python Pythononcampus Uva 060609Python Pythononcampus Uva 060609
Python Pythononcampus Uva 060609gsroma
 
Why I Love Python V2
Why I Love Python V2Why I Love Python V2
Why I Love Python V2
gsroma
 
Amora: A mobile remote assistant
Amora: A mobile remote assistantAmora: A mobile remote assistant
Amora: A mobile remote assistant
gsroma
 
Integração de aplicações em
Integração de aplicações emIntegração de aplicações em
Integração de aplicações em
gsroma
 
Python Na Informática Para Biodiversidade
Python Na Informática Para BiodiversidadePython Na Informática Para Biodiversidade
Python Na Informática Para Biodiversidade
gsroma
 
Por que Python?
Por que Python?Por que Python?
Por que Python?
gsroma
 
Integrando C com Python
Integrando C com PythonIntegrando C com Python
Integrando C com Python
gsroma
 
Busca Visual
Busca VisualBusca Visual
Busca Visual
gsroma
 
Pound & Varnish - Cache e Balanceamento de Carga
Pound & Varnish - Cache e Balanceamento de CargaPound & Varnish - Cache e Balanceamento de Carga
Pound & Varnish - Cache e Balanceamento de Carga
gsroma
 
ZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQL
gsroma
 

Mais de gsroma (10)

Python Pythononcampus Uva 060609
Python Pythononcampus Uva 060609Python Pythononcampus Uva 060609
Python Pythononcampus Uva 060609
 
Why I Love Python V2
Why I Love Python V2Why I Love Python V2
Why I Love Python V2
 
Amora: A mobile remote assistant
Amora: A mobile remote assistantAmora: A mobile remote assistant
Amora: A mobile remote assistant
 
Integração de aplicações em
Integração de aplicações emIntegração de aplicações em
Integração de aplicações em
 
Python Na Informática Para Biodiversidade
Python Na Informática Para BiodiversidadePython Na Informática Para Biodiversidade
Python Na Informática Para Biodiversidade
 
Por que Python?
Por que Python?Por que Python?
Por que Python?
 
Integrando C com Python
Integrando C com PythonIntegrando C com Python
Integrando C com Python
 
Busca Visual
Busca VisualBusca Visual
Busca Visual
 
Pound & Varnish - Cache e Balanceamento de Carga
Pound & Varnish - Cache e Balanceamento de CargaPound & Varnish - Cache e Balanceamento de Carga
Pound & Varnish - Cache e Balanceamento de Carga
 
ZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQL
 

Computação Gráfica em Python

  • 1. Computação Gráfica em Luiz Eduardo Borges http://ark4n.wordpress.com/
  • 2. Sumário ● Computação gráfica ● Imagens em 2D ● Processamento de imagens ● Modelagem 3D ● Animação Foto alterada com o filtro Cubism do GIMP.
  • 3. Computação gráfica Definições: ● Área da ciência da computação que estuda a geração e manipulação de conteúdo visual. ● Tecnologias associadas a criação e manipulação de imagens digitais. ● Representação e manipulação de dados visuais usando Cena 3D renderizada no Blender. computadores.
  • 4. Imagens em 2D (raster) A imagem é composta por pixels (picture elements), com uma cor associada. RGB = (102, 153, 102) Imagem RGB = (102, 153, 204) RGB = (102, 153, 153) Geralmente, as cores dos pixels são representadas em RGB (Red, RGB = (51, 102, 153) Blue, Green).
  • 5. Processamento de imagem Imagem original em um formato raster (mapa de bits). Algoritmos Imagem processada (filtro GIMPressionist / Mossy, do GIMP).
  • 6. PIL (Python Imaging Library) Implementa: ● Ferramentas para cortar, redimensionar e mesclar imagens. ● Algoritmos de conversão. ● Filtros, tais como suavizar e detectar bordas. ● Ajustes, incluindo brilho e contraste. ● Operações com paletas de cores. ● Desenhos simples em 2D. ● Rotinas para tratamento de imagens: equalizar, deformar, inverter e outras.
  • 7. PIL (exemplo A-I) import Image O módulo Image define uma from ImageFilter import * classe para tratar imagens com fn = 'for.png' vários métodos para modificar im = Image.open(fn) suas características. for i, filter in enumerate((CONTOUR, EMBOSS, FIND_EDGES)): fl = im.filter(filter) fl.thumbnail((512, 512), O módulo ImageFilter provê Image.ANTIALIAS) filtros mais comuns para o fl.save(fn.replace('.png', '%d.png' % i), processamento de imagens. 'PNG') pn = im.point(lambda i: i * 3) pn.thumbnail((512, 512), Image.ANTIALIAS) pn.save(fn.replace('.png', '%d.png' % (i + 1)), 'PNG')
  • 8. PIL (exemplo A-II) import Image A função open() cria objetos da from ImageFilter import * classe Image a partir de arquivos. Vários formatos são fn = 'for.png' suportados. im = Image.open(fn) for i, filter in enumerate((CONTOUR, Os filtros CONTOUR, EMBOSS, FIND_EDGES)): EMBOSS e FIND_EDGES são fl = im.filter(filter) alguns que estão disponíveis em fl.thumbnail((512, 512), ImageFilter. Image.ANTIALIAS) fl.save(fn.replace('.png', '%d.png' % i), 'PNG') O método filter() aplica o filtro especificado na imagem. pn = im.point(lambda i: i * 3) pn.thumbnail((512, 512), Image.ANTIALIAS) pn.save(fn.replace('.png', '%d.png' % (i + 1)), 'PNG')
  • 9. PIL (exemplo A-III) import Image from ImageFilter import * fn = 'for.png' O método thumbnail() im = Image.open(fn) redimenciona a imagem. Com antialias, a imagem resultante for i, filter in enumerate((CONTOUR, fica mais suave. EMBOSS, FIND_EDGES)): fl = im.filter(filter) O método save() grava a imagem fl.thumbnail((512, 512), em arquivo no formato Image.ANTIALIAS) especificado. fl.save(fn.replace('.png', '%d.png' % i), 'PNG') O método point() aplica uma pn = im.point(lambda i: i * 3) função a cada ponto da imagem. pn.thumbnail((512, 512), Image.ANTIALIAS) pn.save(fn.replace('.png', '%d.png' % (i + 1)), 'PNG')
  • 10. PIL (exemplo A-IV) Arquivos de saída CONTOUR EMBOSS FIND_EDGES lamdba i: i *3 for0.png for1.png for2.png for3.png
  • 11. Imagens em 2D (vetorial) A imagem é gerada a partir de instruções que descrevem os objetos. As instruções são primitivas geométricas, tais como linha, Arquivo SVG gerado no ponto, círculo e outros. Inkscape.
  • 12. Pylab / Matplotlib Implementa: ● Pylab: API destinada ao uso interativo. ● Matplotib: API orientada a objetos. ● Vários gráficos 2D mais usados: linhas, barras, pizza, dispersão e outros. ● Suporte a gráficos 3D (limitado). ● Vários backends, que permitem exportar para vários formatos populares.
  • 13. Pylab / Matplotlib (exemplo B-I) A função subplot() divide e from pylab import * seleciona um pedaço da área da ent = arange(0., 20.1, .1) figura (311 => 3 linhas, 1 coluna, na primeira posição). subplot(311) sai = cos(ent) plot(ent, sai, lw=3, c=(.1, .25, .5)) A função plot() desenha uma ylabel('A') linha. subplot(312) sai = sin(ent) Texto para o eixo Y. plot(ent, sai, lw=3, c=(.1, .5, .25)) ylabel('B') subplot(313) sai = cos(ent) * sin(ent) plot(ent, sai, lw=3, c=(.1, .5, .5)) Texto para o eixo X. xlabel('entrada') ylabel('A x B') Salva a imagem em arquivo PNG. savefig('graf.png', dpi=100)
  • 14. Pylab / Matplotlib (exemplo B-II) from pylab import * Arquivo de saída ent = arange(0., 20.1, .1) subplot(311) A sai = cos(ent) plot(ent, sai, lw=3, c=(.1, .25, .5)) ylabel('A') subplot(312) B sai = sin(ent) plot(ent, sai, lw=3, c=(.1, .5, .25)) ylabel('B') AxB subplot(313) sai = cos(ent) * sin(ent) plot(ent, sai, lw=3, c=(.1, .5, .5)) xlabel('entrada') ylabel('A x B') graf.png savefig('graf.png', dpi=100)
  • 15. 3D (I) Wireframe Materiais O wireframe representa a Os materiais são aplicados estrutura dos objetos que aos objetos. compõem a cena.
  • 16. 3D (II) Shading Texturas Sombreamento define como Texturas são imagens raster cada objeto da cena reage que são aplicadas aos a luz. materiais.
  • 17. 3D (III) Texturas Sombras A imagem é gerada aplicando um algoritmo (como o raytracing), Reflexão que calcula cada ponto da saída.
  • 18. Animação (técnica keyframe) Keyframe 1 Keyframe 2 001 025 050 Keyframe 3 075 100 125 Os frames entre os keyframes são calculador por interpolação.
  • 19. VPython Implementa: ● Vários objetos 3D simples (cubo, esfera, cilindro, pirâmide, espiral, ...). ● Recursos para facilitar animações. ● Iluminação, zoom e pan automáticos. ● Controles interativos.
  • 20. VPython (exemplo C-I) Desenha quatro caixas. from visual import * box(pos=(12, 0, 0) , length=1 , height=21 , width=29) box(pos=(-12, 0, 0) , length=1 , height=21 , width=29) box(pos=(0, 10, 0) , length=25 , height= 1 , width=29) box(pos=(0, -10, 0) , length=25 , height=1 , width=29) x, y, z = .1, .1, .1 Desenha a esfera e sombra. b = sphere(pos=(3, 5, 7), radius=1.2) s = cylinder(pos=(3, -10, 7), axis=(0, .5, 0), color=color.black) while True: Move a esfera e a sombra. b.pos += (x, y, z) s.x, s.z = b.x, b.z Muda a direção da esfera e da if abs(b.x) > 10: x = -x sombra. if abs(b.y) > 8: y = -y if abs(b.z) > 12: z = -z rate(100) Controla a velocidade da animação.
  • 21. VPython (exemplo C-II) Janela de saída Caixas Esfera b Sombra s
  • 22. Blender Implementa: ● Modelagem 3D avançada, com materiais, texturas, iluminação, extrusão, entre outros. ● Recursos de animação sofisticados. ● Um game engine poderoso. ● Uma API que permite uso do Python.
  • 23. Blender (cena) Fonte de luz Câmera Objetos
  • 24. Blender (exemplo D-I) import math import Blender Câmera # A cena atual cena = Blender.Scene.GetCurrent() # Muda a camera de lugar camera = Blender.Object.Get()[0] camera.setLocation(9., -9., 7.) # Remove da cena o objeto quot;defaultquot; cubo = Blender.Object.Get()[1] cena.objects.unlink(cubo) # Cria uma fonte de luz lampada = Blender.Lamp.New('Lamp') lamp = Blender.Object.New('Lamp') # Muda o lugar da fonte (default = 0.0, 0.0, 0.0) lamp.setLocation(6., -6., 6.) Continua...
  • 25. Blender (exemplo D-II) # quot;Prendequot; a fonte de luz na cena Fonte de luz lamp.link(lampada) cena.objects.link(lamp) # Cria um material material1 = Blender.Material.New('newMat1') material1.rgbCol = [.25, .25, .32] material1.setAlpha(1.) # Cria uma textura textura1 = Blender.Texture.Get()[0] textura1.setType('Clouds') textura1.noiseType = 'hard' # Coloca no material material1.setTexture(0, textura1) mtex = material1.getTextures()[0] mtex.col = (.18, .18, .22) Continua...
  • 26. Blender (exemplo D-III) # Cria o piso mesh = Blender.Mesh.Primitives.Plane(25.) piso = cena.objects.new(mesh,'Mesh') piso.setEuler(0., 0., math.radians(45)) # Coloca o material no piso piso.setMaterials([material1]) piso.colbits = 1 # Cria outro material material2 = Blender.Material.New('newMat2') material2.rgbCol = [.52, .61, .62] material2.setAlpha(1.) # Cria outra textura textura2 = Blender.Texture.Get()[0] Piso textura2.setType('Stucci') textura2.noiseType = 'hard' Continua...
  • 27. Blender (exemplo D-IV) # Coloca no material material2.setTexture(0, textura2) mtex = material2.getTextures()[0] mtex.col = (.22, .22, .32) # Cria objetos na cena def objeto(local, tam, mat, prim=Blender.Mesh.Primitives.Cube): mesh = prim() obj = cena.objects.new(mesh, 'Mesh') obj.setLocation(*local) obj.size = tam obj.setMaterials(mat) obj.colbits = 1 return obj mat = [material2] Continua...
  • 28. Blender (exemplo D-V) # Primitiva do cilindro prim = Blender.Mesh.Primitives.Cylinder # Cria colunas no fundo for i in xrange(16): # Topo da primeira fileira local = (i - 8., 8., 2.5) tam = (.25, .25, .1) objeto(local, tam, mat) # Base da primeira fileira local = (i - 8., 8., 0.) objeto(local, tam, mat) # Corpo da primeira fileira Colunas tam = (.2, .2, 2.5) objeto(local, tam, mat, prim) Continua...
  • 29. Blender (exemplo D-VI) # Topo da segunda fileira Aqueduto local = (-8., i - 8., 2.5) tam = (.25, .25, .1) objeto(local, tam, mat) # Base da segunda fileira local = (-8., i - 8., 0.) objeto(local, tam, mat) # Corpo da segunda fileira tam = .2, .2, 2.5 objeto(local, tam, mat, prim) # Aqueduto local = (-8., i - 8., 3.) tam = (.5, .5, .5) objeto(local, tam, mat) local = (i - 8., 8., 3.) objeto(local, tam, mat) Continua...
  • 30. Blender (exemplo D-VII) # Cria colunas em cima do piso for i in (-3, 3): for j in range(-3, 4): # Topo das fileiras X local = (i, j, 2.5) tam = (.25, .25, .1) objeto(local, tam, mat) # Topo das fileiras Y local = (j, i, 2.5) objeto(local, tam, mat) # Base das fileiras X local = (i, j, .5) objeto(local, tam, mat) Colunas Continua...
  • 31. Blender (exemplo D-VIII) # Base das fileiras Y local = (j, i, .5) objeto(local, tam, mat) # Corpo das fileiras X local = (i, j, 0) tam = (.2, .2, 2.5) objeto(local, tam, mat, prim) # Corpo das fileiras Y local = (j, i, 0) objeto(local, tam, mat, prim) # Cria escada for i in xrange(4): Escada local = (0., 0., i / 16.) tam = (2. + (8. - i) / 4.,2. + (8. - i) / 4., .25) objeto(local, tam, mat) Continua...
  • 32. Blender (exemplo D-IX) # Cria teto for i in xrange(35): local = (0., 0., 2.7 + i / 60.) tam = (3.5 , 3.5 * ( 1. - i / 35.), .1) objeto(local, tam, mat) # Atualiza a cena cena.update() Teto
  • 33. Blender (exemplo D-X) Cena final
  • 34. Referências PIL: ● http://www.pythonware.com/products/pil/ Matplotlib: ● http://matplotlib.sourceforge.net/ VPython: ● http://vpython.org/ Blender: ● http://www.blender.org/
  • 35. Computação Gráfica em Luiz Eduardo Borges http://ark4n.wordpress.com/ Fim