OpenCV. http://opencv.willowgarage.com/wiki/



Documentos relacionados
Tutorial de OpenCV para Tótós

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Manual Processamento de Imagem. João L. Vilaça

Algoritmos e Programação Estruturada

Programação de Computadores I. Conhecendo a IDE Code::Blocks

OURO MODERNO Designer Gráfico APOSTILA DE EXEMPLO. (Esta é só uma reprodução parcial do conteúdo)

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Atividade: matrizes e imagens digitais

Thales Trigo. Formatos de arquivos digitais

JSP - ORIENTADO A OBJETOS

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme

Universidade Federal de Santa Maria UFSM Centro de Tecnologia CT. Power Point. Básico

Resumo da Matéria de Linguagem de Programação. Linguagem C

Microsoft PowerPoint 2003

Manual de Utilização COPAMAIL Criando e configurando a assinatura de . Zimbra Versão 8.0.2

Componentes da linguagem C++

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

AMBIENTE DE PROGRAMAÇÃO PYTHON

Configuração do Ambiente de Trabalho

Considerações: Leia a lista toda, o quanto antes, para evitar más interpretações e muitas dúvidas em cima da hora

Introdução à Tecnologia Web HTML HyperText Markup Language XHTML extensible HyperText Markup Language Formatos de Imagens

Manual para conversão de Teses e Dissertações em PDF

Capítulo 2: Introdução à Linguagem C

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

NetBeans. Conhecendo um pouco da IDE

2 Orientação a objetos na prática

INF 1005 Programação I

MANUAL DE UTILIZAÇÃO DO PLUGIN GERADOR DE PLUGINS DO TERRAVIEW

LINGUAGEM DE PROGRAMAÇÃO ESTRUTURADA CAPÍTULO 1 APRESENTANDO O C#

Imagem digital. Unidade 3

Permissão de Usuários

Manual de Administração DPS Printer 2.1 NDDigital S/A - Software

ATENÇÃO: * Arquivos com tamanho superior a 500 KB NÃO SERÃO ACEITOS * SOMENTE serão aceitos documentos do formato: PDF

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Chapter 2 Guia de referência rápida 2-

Introdução. O que é o Registro do Windows

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Sistema Click Principais Comandos

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES

20 Caracteres - Tipo char

Workshop Processing: Visualização de Dados e Interatividade

Princípios de funcionamento dos computadores

Implementando plugins para o ImageJ

AplusixEditor: o editor para Aplusix 3 Manual de utilização

AULA 5 Manipulando Dados Matriciais: Grades e Imagens. 5.1 Importando Grades e Imagens Interface Simplificada

Lição 1 - Criação de campos calculados em consultas

VISUAL LIGHTBOX FERRAMENTA WEB DESIGN FABIANO KEIJI TAGUCHI

ArcSoft MediaConverter

mkdir /srv/www/default/html/calculadora/imagens mkdir /srv/www/default/html/calculadora/blocos

índice I. Introdução Procedimentos básicos V. Prontuário Configurações VII. Medicamentos VIII. Tags

Tutorial: Programando no Linux

Scriptlets e Formulários

Introdução ao Processamento de Imagens com o IRIS Por Rodolfo Barros

Curso de Programação Computadores

Função E. Excel 2007 Avançado. Sintaxe: Onde: Objetivo : 22 anos ou mais e casadas maiores de 21 anos.

Veja abaixo um exemplo de como os dados são mostrados quando usamos o

Banco de Dados BrOffice Base

Hae Yong Kim. Cekeikon4 pode ser utilizado livremente tanto para fins não-lucrativos (acadêmicos e educacionais) como para fins comerciais, desde que:

Básico, Ferramentas e o Primeiro Programa em Qt

DarkStat para BrazilFW

Gráfico em Linha. IDL> plot, chirp

CorelDRAW UM PROGRAMA DE DESIGN

Orientação a Objetos

Tutorial para Instalação de AVG 2012

1. Ligar o Computador Ambiente de Trabalho

Tutorial Paint Brush

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - MILLENNIUM

Manual de configuração do sistema

Manual de Operação do Sistema de Tickets Support Suite

Visão Geral sobre o tutorial de Utilização de

No final desta sessão o formando deverá ser capaz de aceder ao Word e iniciar um novo documento.

Microsoft Access XP Módulo Um

Informática Aplicada

PASSO A PASSO MOVIE MAKER

Dokmee Page Counter Office Gemini

Sistemas Operacionais

Sistema de Recursos Humanos

Manual de Utilização

APLICATIVOS GRÁFICOS (AULA 4)

INF 1620 P1-10/04/02 Questão 1 Nome:

UNIVERSIDADE FEDERAL DA PARAÍBA CENTRO DE CIÊNCIAS EXATAS E DA NATUREZA DEPARTAMENTO DE GEOCIÊNCIAS

Introdução. Servidor de Tempo (SNTP) com opção de horário de verão automático; 1 Cadastro do novo modelo de equipamento Urano Topmax SS

Manual Geral do OASIS

Projeto de Máquinas de Estado

Cartilha da Nota Fiscal Eletrônica 2.0 Hábil Empresarial PROFISSIONAL & Hábil Enterprise

UFGD FCA PROF. OMAR DANIEL BLOCO 6 CLASSIFICAÇÃO DE IMAGENS

Microsoft Office PowerPoint 2007

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho.

1.2) Na tela seguinte, o primeiro item a ser selecionado é o Unidade Acumuladora1.

Guia de instalação UEG Linux LTS

Sumário. Este Guia Rápido do Usuário ajuda você a começar a usar o IRIScan TM Mouse 2.

1. PROLOGO ==========

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

Transcrição:

OpenCV http://opencv.willowgarage.com/wiki/ Introdução a OpenCV Geralmente, quando iniciamos estudos numa determinada linguagem de programação é comum que o iniciante implemente um pequeno programa de fácil entendimento chamado HelloWorld. Com a biblioteca OpenCV não é diferente, no entanto, ao invés de imprimir na tela a frase Hello World!, imprimiremos uma imagem de nosso interesse. A OpenCV possui cinco ficheiros include descritos a seguir: cv.h contém o básico de processamento de imagem e algoritmos de visão computacional; ml.h é a biblioteca de aprendizagem de máquina, que inclui muitos classificadores estatísticos; highgui.h contém rotinas I/O e funções para armazenar e carregar imagens e vídeos; cxcore.h contém as estruturas de dados básicos; cvaux.h contém as áreas de reconhecimento facial e algoritmos experimentais. Para nós será necessário apenas as headers cv.h e highgui.h, por tanto, não esqueça de incluir as seguintes linhas de comando no inicio de cada programa: #include "highgui.h" #include "cv.h" Exercício 1.1: HelloWorld! Neste primeiro exercício, iremos implementar o código HelloWorld, como foi dito anteriormente, que permite a visualização da imagem na tela. Escola do CBPF 2012 1

O primeiro passo consiste em carregar a imagem de interesse para a memória, retornando o ponteiro do tipo IplImage, (struct pré definida pela OpenCV), que aponta para a imagem carregada, conforme se segue: IplImage * img = cvloadimage(const char* filename, int iscolor = CV_LOAD_IMAGE_COLOR); A função cvloadimagem recebe como argumento o nome ou path da imagem e um valor inteiro, correspondente ao número de canais que a imagem irá ter: Se valor inteiro > 0, a imagem carregada é forçada a ser uma imagem colorida de 3 canais; Se valor inteiro = 0, a imagem carregada é forçada a ser em tons de cinza; Se valor inteiro < 0, a imagem será carregada com o seu próprio número de canais. Vale ressaltar que os formatos de imagem suportados atualmente são: BMP, DIB, JPEG, JPE, PNG, PBM, PGM, PPM, SR, RAS, TIFF, TIF. Exemplo 1: IplImage * img = cvloadimage( lena.jpg, 1); Em seguida, iremos criar uma janela, na qual será exibida a imagem: cvnamedwindow(const char* name, int flags); O primeiro argumento recebe o nome da janela de nossa escolha, o segundo é a flag relativa à forma como a janela se comporta, neste caso autosize, ou seja, adéqua se ao tamanho da imagem. Falta agora associar a imagem à janela, que será feito através da seguinte função: cvshowimage(const char* name, const CvArr* image); Os parâmetros são, respectivamente, o nome da janela onde quero exibir a imagem, e o ponteiro que aponta para onde está a imagem. Exemplo 2: cvnamedwindow ( Imagem, CV_WINDOW_AUTOSIZE); cvshowimage( Imagem, img); Finalizamos o programa com a função a seguir que permite que todas as janelas abertas pelo programa sejam fechadas ao pressionarmos uma tecla: cvwaitkey(); A partir das funções acima, escreva o código que abra a imagem lena.jpg que se encontra na pasta 03 opencv. Experimente manipular a função cvloadimage() de forma que a imagem seja carregada em tons de cinza. Exercício 1.2: Convertendo escala de cores Alguns algoritmos de PI exigem que a imagem antes de ser trabalhada esteja em uma determinada escala de cores. Para isto, é criada uma matriz que aloca os dados da nova Escola do CBPF 2012 2

imagem com o tamanho da original e com o número de canais que se deseja ter, a partir da função a seguir: IplImage* cinza = cvcreateimage( cvgetsize(img), int depth, int channels); Os parâmetros são os seguintes: Tamanho da imagem: que é obtida através da função cvgetsize() que extrai o tamanho da imagem original; Depth (profundidade): que nada mais é que o número de bits por pixel; Número de canais por pixel. Exemplo 3: IplImage* cinza = cvcreateimage(cvgetsize(img),ipl_depth_8u, 1); A variável cinza recebe o resultado da conversão de cor, que é realizada da seguinte forma: cvcvtcolor(const CvArr* src, CvArr* dst, int code); Onde os parâmetros são o ponteiro para a imagem original, ponteiro para a imagem que conterá o resultado da conversão e o tipo de conversão, respectivamente. O ultimo argumento é um código pré determinado pela OpenCV o qual carrega em seu nome a escala de cor original e a resultante, como por exemplo, CV_RGB2GRAY que converte de RGB para níveis de cinza e a CV_GRAY2RGB que realiza o inverso. Exemplo 4: cvcvtcolor(imagem, cinza, CV_RGB2GRAY); Na pasta 03 opencv existe um código de nome imagem_cinza.cpp que foi desenvolvido a partir do exercício anterior utilizando as novas funções. Compile e execute o programa e observe o que ocorre. Existe alguma diferença entre esta resultante e a imagem em tons de cinza obtida no exercício anterior? Exercício 1.3: Binarização Em geral, algoritmos de PI tem como uma de suas etapas a binarização da imagem. Para isto, a OpenCV oferece a seguinte função: cvthreshold(const CvArr* src, CvArr* dst, double threshold, double maxvalue, int thresholdtype); Esta função converte uma imagem em níveis de cinza numa imagem binária e os parâmetros são: src: é o ponteiro que aponta para a matriz criada a partir da função cvcreateimage() que contem os dados da imagem em escala de cinza; dst: é o ponteiro que aponta para a matriz de destino onde serão alocadas as informações da imagem depois de ser binarizada. Caso a imagem em níveis de cinza não seja mais utilizada, o ponteiro dst pode apontar para a mesma matriz apontada por src; threshold: é a limiar ou valor de corte; maxvalue: é o máximo valor que o corte pode assumir; Escola do CBPF 2012 3

thresholdtype: neste parâmetro é onde o programador determina qual o tipo de binarização deve ser aplicada à imagem. Normalmente, utiliza se o tipo mais básico que é o CV_THRESH_BINARY, mas a função também oferece CV_THRESH_BINARY_INV, CV_THRESH_TRUNC, CV_THRESH_TOZERO e CV_THRESH_TOZER_INV. Exemplo 5: cvthreshold(binaria,binaria,threshold,maxvalue,thresholdtype); Ainda na pasta 03 opencv encontra se um código de nome binariza.cpp. A partir do programa, observe a imagem resultante e, em seguida, altere na parte superior do código o valor da variável threshold para 50. O que ocorre com a saída? Em seguida, edite e compile o seu programa utilizando os outros tipos de binarização alterando a variável thresholdtype para: CV_THRESH_BINARY_INV, CV_THRESH_TRUNC, CV_THRESH_TOZERO e CV_THRESH_TOZER_INV. Você é capaz de descrever a diferença entre eles? Experimente variar o valor da variável threshold observando a mudança na saída. Exercício 1.4: Detecção de Contornos O algoritmo de detecção de contornos tem como objetivo contornar objetos de uma imagem. Esta implementação tem grande aplicação na área de PI, como por exemplo, cálculo da área dos objetos detectados. A seguir serão descritas as funções necessárias para a construção do código. Primeiramente, é preciso reservar um espaço da memória vazio destinado a alocar os resultados retornados pelas funções que serão utilizadas: CvMemStorage* storage = cvcreatememstorage(int blocksize=0); Exemplo 6: g_storage = cvcreatememstorage(0); Caso seja necessário, há uma forma de limpar o espaço de memória já alocado: cvclearmemstorage(cvmemstorage* storage); Exemplo 7: cvclearmemstorage( g_storage ); Antes de seguir, é preciso definir o que é contorno, que nada mais é que uma lista de pontos (pixels) que representam, de uma maneira ou de outra, uma curva de uma imagem. Esta representação varia de acordo com as circunstâncias, já que há muitas maneiras de representar uma curva. Na OpenCV os contornos são representados por seqüências em que cada entrada na seqüência codifica a informação sobre a localização do próximo ponto na curva. Para isso, existe a função a seguir: cvfindcontours(cvarr* image, CvMemStorage* storage, CvSeq** first_cont); Os parâmetros são: image: o ponteiro que aponta para a imagem que deve estar binarizada, caso não esteja, a função irá usar os valores diferentes de zero como 1s e assim fingir que a imagem está binarizada ; Escola do CBPF 2012 4

storage: o ponteiro para o espaço de memória reservado onde será guardado as seqüências de pixels de contorno; first_cont: este parâmetro irá retornar um ponteiro que aponta para o primeiro pixel de contorno. Como a função utiliza um ponteiro de retorno (first_cont), então precisamos criá lo antes de chamar a função: CvSeq* first_cont = 0; Exemplo 8: CvSeq* contours = 0; cvfindcontours( g_gray, g_storage, &contours ); Finalizado todo processo, então podemos exibir para o usuário o resultado utilizando a função que desenha os contornos: cvdrawcontours(cvarr *img, CvSeq* contour, CvScalar external_color, CvScalar hole_color, int thickness=1); Os parâmetros são: img: ponteiro para a imagem onde os contornos serão desenhados; contour: ponteiro para o primeiro pixel do contorno; external_color: cor dos contornos externos; hole_color: cor dos contornos internos; thickness: este parâmetro sinaliza para a função se ela deve desenhar contorno interno e externo se thickness 0 ou preencher a área delimitada pelos contornos se thickness < 0. Exemplo 9: cvdrawcontours(g_gray,contours,cvscalarall(255),cvscalarall(255),1); Agora que já sabemos algumas funções básicas da biblioteca OpenCV, já somos capazes de entender o código de nome detecontornos.cpp, para isto abra o na pasta 03 opencv e execute o programa observando o resultado. Para um maior aproveitamento do curso é essencial que o aluno desenvolva seus próprios códigos utilizando as funções aqui apresentadas. Escola do CBPF 2012 5