



















































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Materia para intendimento da biblioteca de visão computacional para Java
Tipologia: Notas de estudo
1 / 59
Esta página não é visível na pré-visualização
Não perca as partes importantes!




















































Agradeço a Deus pelo me dar força diária, aos meus familiares que tem me dado todo o apoio todos esses anos e aos professores e colegas que contribuíram de forma positiva na minha vida acadêmica. Anderson P. Evangelista
A Deus pela força, a minha esposa e ao meu filho pela paciência, aos meus pais pela confiança e pelo amor de todos já citados. Cláudio D. Ramos
Primeiramente quero agradecer a Deus, pois sem Ele este trabalho não poderia ser realizado. Agradeço também os meus pais pela dedicação e pelos ensinamentos que me trouxeram até este momento de minha vida, e continuam me guiando por esta grande jornada, e agradeço a todos os meus amigos e professores por compartilharem suas jornadas e conhecimentos comigo. Antônio I. Gaspar
Agradeço a Deus pela oportunidade de participar desse trabalho e ao apoio da minha família. Ambos são a razão de todo meu esforço. Não posso deixar de agradecer também aos companheios de turma e aos professores cujo apoio também foi fundamental. Paulo G. Aguiar
Este trabalho tem como objetivo apresentar a biblioteca OpenCV, abordando características importantes desta grande ferramenta visando expor ao leitor uma ideia geral, mostrando sua utilidade para desenvol- ver aplicações que envolvam visão computacional.
No primeiro capítulo desta obra será mostrada informações im- portantes da ferramenta, abordando o histórico, mostrando as motiva- ções para o desenvolvimento da biblioteca. Será mostrado também a estrutura, trazendo uma breve descrição dos módulos que compõe a bi- blioteca, como por exemplo o módulo CORE, MACHINE LEARNING, HIGHGUI entre outros.
No segundo capítulo mostraremos como realizar a instalação da biblioteca para que seja usada no IDE NetBeans. O passo-a-passo de instalação será mostrada tando para o sistema operacional WINDOWS quanto para LINUX.
Do terceiro capítulo em diante será mostrada como criar algumas aplicações usando as funções do OpenCV, onde será apresentada uma biblioteca que auxilia na criação de aplicações com OpenCV na lingua- gem Java, o JavaCV. Esta biblioteca permite ao desenvolvedor usar mé- todos do OpenCV como se estivesse programando em C++ dentro do ambiente Java. Nos demais exemplos vamos demonstrar como realizar algumas transformações numa imagem, realizando mudança no sistema de cores, como utilizar um dispositivo de vídeo ligado ao computador com OpenCV e por fim, mostraremos como desenvolver uma pequena aplicação de detecção de padrões em vídeo.
11
O OpenCV é uma biblioteca de visão computacional que provê uma infraestrutura para desenvolvimento de aplicações na área de visão computacional de forma simples e rápida. A biblioteca possui diver- sos algoritmos que envolvem processamento de imagens e aprendizado de máquina, este último geralmente voltado para o reconhecimento de padrões.
Visão computacional é a área de estudo que tem por objetivo extrair informações relevantes a partir de imagens. Essas imagens podem ser obtidas de diversas formas: uma câmera fotográfica, um raio-X, uma ressonância magnética, um espectograma do som, dentre outras fontes.
O ser humano possui um complexo sistema que permite interpretar alguma informação através de uma imagem. A luz entra pela íris, e atinge o fundo do olho, onde estão localizados os cones e bastonetes, responsáveis por capturar a frequência da faixa luminosa e gerar um impulso elétrico para o cérebro. O cérebro recebe o impulso e interpreta como uma cor. A imagem é então formada no cérebro, que através do seu repositório de informações associadas, fornece uma interpretação para a imagem visualizada.
A máquina apenas enxerga números. Ela não possui a capacidade nativa de interpretar cores e realizar associações. Portanto, cabe aos de- senvolvedores utilizarem técnicas de análise de imagem e aprendizado de máquina para processar a imagem, retirar dados e por fim gerar uma
12 Capítulo 1. O que é OPENCV?
informação relevante. Em relação a esse pensamento, o OpenCV é uma ferramenta bastante completa, pois ela nos fornece métodos tanto para análise de imagens como para aprendizado de máquina. O desenvolve- dor não necessita recorrer a outras bibliotecas.
1.2 | Breve Histórico
O OpenCV cresceu em uma iniciativa do setor de pesquisa da Intel que trabalhava com aplicações que utilizam intensamente a CPU. Eles trabalhavam especificamente com ray-tracing em tempo real e retropro- jetores. Na época, um dos pesquisadores visitou algumas das grandes universidades do mundo, como MIT por exemplo, e descobriu que os alunos desenvolviam uma infraestrutura para visão computacional de forma interessante: os novos estudantes recebiam os códigos desenvol- vidos e incrementavam novas funcionalidade ou então corrigiam fun- cionalidades existentes, não era necessário reinventar a roda. Portanto, o OpenCV seguiu o mesmo raciocínio: não era necessário reinventar a roda, mas sim incrementar a biblioteca de forma que pudesse ser uni- versalmente utilizada. Assim, o OpenCV começou com um núcleo de códigos que foi enviado para o time de desenvolvimento da Rússia, onde o OpenCV propriamente dito originou. Pode-se citar três pessoas que contribuíram enormemente para o desenvolvimento da biblioteca: Va- dim Pisarevsky, que gerenciou, codificou e otimizou uma grande parte da biblioteca; Victor Eruhimov, que desenvolveu a infraestrutura e Valerya Kuriakin, que gerenciou o laboratório russo e contribuiu enormemente para o projeto.
Podemos descrever três objetivos da biblioteca, que definem o porquê de se utilizar o OpenCV como ferramenta para visão compu- tacional:
14 Capítulo 1. O que é OPENCV?
1.3.1 | Estrutura Básica
As estruturas básicas do módulo Core são referentes às definições dos objetos, classes, atributos e funções que serão manipulados e/ou executarão as operações do cerne da biblioteca. Como exemplo, pode-se citar a classe DataType que serve para oferecer uma descrição dos dados primitivos, como mostra a figura abaixo:
Figura 1 – Classe DataType
Além desta classe, se encontra a Point_ (que descreve um ponto no plano cartesiano), a Point3_ (ponto 3D), Size, entre outras, como a classe Mat que define um array denso numérico n-dimensional single-channel ou multi-channel, o qual por sua vez, poderá ser usado para armazenar imagens na forma de matriz.
O módulo possui uma API para linguagem C com classes corres- pondentes às supracitadas: CvPoint, CvPoint3D32f, CvSize.
1.3.1 | Operações com Arrays
Parte do módulo Core que possui um conjunto de métodos para operações com vetores, matrizes, etc. Um exemplo é o método Abs que determina o módulo de cada elemento da matriz.
1.3. Módulos do OPENCV 15
Figura 2 – Classe CV_EXPORTS
Figura 3 – Calculo do módulo dos elementos da matriz
Dentre outras funções, além do Abs, é possível utilizar Absdiff, Add, etc.
1.3.1 | Funções de Desenho
As funções de desenho trabalham com matrizes/imagens de pro- fundidade arbitrária. Todas as funções incluem o parâmetro color que
1.3. Módulos do OPENCV 17
dos métodos de agrupamento abrangidos pelo OpenCV faz parte do módulo core: Kmeans.
1.3.2 | Módulo HIGHGUI
O OpenCV fornece funções que auxiliam na interação com arqui- vos e hardware do sistema operacional. Estas funções estão agrupadas no módulo Highgui(“High Level Graphical User Interface”). Através desse módulo, podemos criar janelas, visualizar, ler e editar arquivos de imagem e vídeo, manipular componentes de hardware como webcans e câmeras e manipular também eventos do mouse e do teclado.
Podemos subdividir o módulo Highgui em três partes: a parte que trata do hardware, a parte que trata dos arquivos e a parte que trabalha com os componentes GUI. Vamos analisar cada cada uma dessas partes para melhor entender como o módulo funciona.
A parte de hardware basicamente foi concebida para operar com câmeras. Utilizar esse recurso do computador geralmente é tedioso e trabalhoso, mas os componentes de hardware do Highgui proporcionam métodos simples de buscar as câmeras disponíveis no sistema e utilizá- las, por exemplo, para aquisição de imagens. Toda a parte trabalhosa é abstraída pelo OpenCV.
Os componentes que tratam de arquivos de áudio e vídeo têm como objetivo carregar e salvar arquivos. Uma característica interessante é que os métodos para ler um arquivo de vídeo são os mesmo utilizados para ler dados vindos da câmera, ou seja, ler o vídeo da câmera.
A terceira parte que trata dos componentes GUI provê métodos que permitem criar janelas para a visualização de dados gráficos na tela. Permite também detectar e tratar eventos relacionados ao mouse e ao teclado. Podemos criar rotinas que sejam invocadas a partir dos eventos capturados, proporcionando diversas alternativas de implementações utilizando apenas os componentes GUI do OpenCV.
18 Capítulo 1. O que é OPENCV?
1.3.2 | Criando uma janela
Primeiramente, devemos compreender como criar uma janela e, a partir dela, mostrar o conteúdo gráfico que queremos. Para criar uma janela utilizando o JavaCV, utilizaremos a classe CanvasFrame, do pacote org.bytedeco.javacv. A seguir temos o código básico para criar uma janela:
CanvasFrame cf = new CanvasFrame("Digite o título da janela aqui!"); cf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Criamos o objeto que será nossa janela e passamos para o construtor uma String que representa o título da janela. Após, definimos que a aplicação encerrará fechando a janela. Podemos utilizar a constante estática definida na classe JFrame, contida no pacote javax.swing.
Para redimensionar a janela, podemos utilizar o seguinte método do objeto CanvasFrame:
cf.setCanvasSize(int width, int height) Onde definimos a largura e a altura desejada.
1.3.3 | Módulo ML
Em muitas aplicações de visão computacional, não se tem um tipo de classificador pronto para está atuando sobre o conjunto de imagens que se quer trabalhar, nesses casos é necessário desenvolver o classifica- dor que se adeque a aplicação.
No OPENCV módulo de Machine Learning, ou ML, onde há im- plementado diversos tipos de algoritmos de aprendizado de máquina como: