Manipulação de imagens em OpenGL O objetivo desta aula é exibir e manipular imagens em OpenGL .

8
Manipulação de imagens em OpenGL O objetivo desta aula é exibir e manipular imagens em OpenGL. Baixe da página do professor o arquivo com exemplos e descompacte em um diretório. Abra o projeto Imagens-DEV4.9.8.0.dev. Se tiver dúvidas de como criar um projeto no DEVCPP, consulte o material da primeira aula de OpenGL. Caso você esteja usando uma outra versão do DEVCPP, crie um novo projeto como uma aplicação do tipo Console, em C++ e inclua as diretivas de OpenGL ( -lopengl32 -lglut32 -lglu32 -lglaux ). Note que estas diretivas não são exatamente as mesmas daquelas usadas em outras aulas. Neste caso, foi adicionada a biblioteca glaux que permite carregar iamgens BMP. Antes de executar o programa, é necessário definir onde está a imagem a ser carregada pelo mesmo. para tanto, abra o fonte ImageTest2.cpp e procure a função void init(void). Dentro desta função há uma linha onde um método Load é chamado: r = Image->Load("C:... \\EAGLE.BMP "); Altere esta linha de forma a definir o local onde você colocou sue projeto ao descompactá-lo.

description

Manipulação de imagens em OpenGL O objetivo desta aula é exibir e manipular imagens em OpenGL . Baixe da página do professor o arquivo com exemplos e descompacte em um diretório. Abra o projeto Imagens-DEV4.9.8.0. dev . - PowerPoint PPT Presentation

Transcript of Manipulação de imagens em OpenGL O objetivo desta aula é exibir e manipular imagens em OpenGL .

Page 1: Manipulação de imagens em  OpenGL O objetivo desta aula é exibir e manipular imagens em  OpenGL .

Manipulação de imagens em OpenGLO objetivo desta aula é exibir e manipular imagens em OpenGL.

Baixe da página do professor o arquivo com exemplos e descompacte em um diretório. Abra o projeto Imagens-DEV4.9.8.0.dev.

Se tiver dúvidas de como criar um projeto no DEVCPP,  consulte o material da primeira aula de OpenGL.

Caso você esteja usando uma outra versão do DEVCPP, crie um novo projeto como uma aplicação do tipo Console, em C++ e inclua as diretivas de OpenGL ( -lopengl32 -lglut32 -lglu32 -lglaux ). Note que estas diretivas não são exatamente as mesmas daquelas usadas em outras aulas. Neste caso, foi adicionada a biblioteca glaux que permite carregar iamgens BMP.

Antes de executar o programa, é necessário definir onde está a imagem a ser carregada  pelo mesmo. para tanto, abra o fonte ImageTest2.cpp e procure a função void init(void). Dentro desta função há uma linha onde um método Load é chamado:

r = Image->Load("C:... \\EAGLE.BMP");

Altere esta linha de forma a definir o local onde você colocou sue projeto ao descompactá-lo.

Page 2: Manipulação de imagens em  OpenGL O objetivo desta aula é exibir e manipular imagens em  OpenGL .

Após a execução do programa, o resultado deve ser semelhante a este apresentado na figura abaixo.

Page 3: Manipulação de imagens em  OpenGL O objetivo desta aula é exibir e manipular imagens em  OpenGL .

A Classe ImageClassPara realizar a carga de uma imagem, o programa acima usar a classe ImageClass que encapsula as funções de OpenGL para acesso a imagens, para usar esta classe você deve criar uma instância da classe e carregar uma imagem da seguinte forma:

// Cria um objeto imagem    Image = new ImageClass();

    r = Image->Load("C:\\ .. \\EAGLE.BMP");    if (!r)    {        printf("Imagem não encontrada. Verifique o nome do Arquivo.\n");        printf("Pressione ENTRE para encerrar.");        getchar();        exit(1);    }    else printf ("Imagem carregada!\n");

Page 4: Manipulação de imagens em  OpenGL O objetivo desta aula é exibir e manipular imagens em  OpenGL .

Você pode ainda, criar uma imagem vazia da seguinte forma:

        // Instacia o objeto que irá exibir uma nova imagem     // Caso precise alterar o tamanho da nova imagem, mude os parâmetros    // da construtura, na chamada abaixo. No exemplo a nova imagem  é criada    // usando o tamanho da imagem recém carregada de disco 

    NovaImagem = new ImageClass(Image->SizeX(), Image->SizeY());        // Posiciona a imagem nova ao lado da antiga    NovaImagem->SetPos(Image->SizeX()+10, 0);

Page 5: Manipulação de imagens em  OpenGL O objetivo desta aula é exibir e manipular imagens em  OpenGL .

• Para acessar os pontos da imagem você pode usar os métodos ReadPixel e DrawPixel.

Para obter a cor RGB de um pixel x,y na imagem use :Image->ReadPixel(GLint x, GLint y, unsigned char &r, unsigned char &g, unsigned char &b)

• Para alterar  a cor RGB de um pixel x,y na imagem use :Image->DrawPixel(GLint x, GLint y, unsigned char r, unsigned char g, unsigned char b)

•Para obter o a Internsidade(Luminosidade) de um ponto use:i = Image->GetPointIntensity(x,y);

Page 6: Manipulação de imagens em  OpenGL O objetivo desta aula é exibir e manipular imagens em  OpenGL .

• Exercício 1

•Abra o programa-fonte ImageTeste2.cpp e procure entender como funcionam as rotinas init e ConvertBlackAndWhite.

Pressionando a tecla 2 na execução do programa você consegue observar o resultado da aplicação da rotina ConvertBlackAndWhite. Veja também a seção 4.1 da página sobre Imagens.

1 . Crie uma rotina capaz de exibir a imagem de entrada em tons de cinza, conforme a imagem abaixo. Lembre-se que você pode fazer uma imagem R, G, B em tons de cinza simplesmente igualando os valores R, G e B iguais a média dos três valores originais.

Page 7: Manipulação de imagens em  OpenGL O objetivo desta aula é exibir e manipular imagens em  OpenGL .

5.1 Filtros Passa-alta

Trata a curva mantendo trechos de alfa freqüência e eliminando trechos de baixa freqüência Usado para detectar bordas em imagens

• Algoritmos

• 1)Detectar bordas não horizontais

Para cada ponto (x,y) de uma linha     Se (Cor(x-1,y) - Cor(x,y)) > limiar     Então Gera um ponto na imagem de saída na posição (x,y)

• 2)Detectar bordas não verticais

Para cada ponto (x,y) de uma coluna     Se (Cor(x,y-1) - Cor(x,y)) > limiar     Então Gera um ponto na imagem de saída na posição (x,y)

Page 8: Manipulação de imagens em  OpenGL O objetivo desta aula é exibir e manipular imagens em  OpenGL .

Exercício 2

Complete a rotina void DetectImageBorders() a fim de detectar as bordas de uma imagem, como na figura abaixo.