Buscar

Apostila do Minicurso do OpenCV

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
Sumário
CAPÍTULO I – O que é Visão Computacional?..................................................................................2
1. Conceitos Iniciais de Visão..........................................................................................................2
2. Visão Computacional...................................................................................................................2
CAPÍTULO II – O que é a OpenCV?..................................................................................................3
1. Conceitos Iniciais da Biblioteca OpenCV...................................................................................3
2. Módulos da Biblioteca OpenCV..................................................................................................4
3. Instruções Básicas de Instalação da Biblioteca no Linux............................................................4
4. Compilando e Executando seus Programas.................................................................................7
CAPÍTULO III – Implementações Básicas Usando o OpenCV..........................................................8
1. Lendo Arquivo de Imagem..........................................................................................................8
2. Suavizando Imagens....................................................................................................................9
3. Lendo Arquivo de Vídeo AVI...................................................................................................10
4. Editando Frames (Quadros) de um Vídeo AVI.........................................................................10
5. Capturando Frames (Quadros) Através de uma WebCam.........................................................12
6. Gravando Frames (Quadros) Capturados por uma WebCam....................................................13
Prof. Ivo Sócrates Moraes de Oliveira Página: 1
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
CAPÍTULO I – O que é Visão Computacional?
1. Conceitos Iniciais de Visão
2. Visão Computacional 
1. Conceitos Iniciais de Visão
Visão é um sentido que extrai uma representação do mundo real com base em dados visuais. 
Não é só o conceito de recepção de imagens, mas envolve o conceito de compreender o que está se 
vendo. Parte considerável do raciocínio humano é dedicado a compreender o que é obtido pela 
visão natural, isto, o tempo todo. 
Em relação a visão humana temos alguns probleminhas, pequenas variações na imagem 
levam a interpretações distintas, a interpretação de uma imagem pode ser ambígua e ainda temos as 
ilusões de óptica (distorções, paradoxo e ficção). Enfim, o funcionamento biológico não é perfeito e 
muito menos simples.
2. Visão Computacional
No computador, a primeira etapa é utilizar sensores para capturar uma imagem e, 
posteriormente, é necessário representá-la digitalmente. A visão computacional procura imitar a 
visão humana, portanto possui como entrada uma imagem e a saída é uma interpretação da imagem. 
Processamento realizado na Visão Computacional ocorre em três níveis:
– baixo-nível: operações primitivas (redução de ruído ou melhoria no contraste de uma 
imagem ou uma sequência de imagem);
– nível-médio: operações do tipo segmentação ou classificação;
– alto-nível: tarefas de cognição normalmente associadas com a visão humana.
* Referências:
Bradski, G., Kaehler , A., Learning OpenCV , 1º Ed., Sebastopol : O’Reilly Media, Inc. , 2008.
Prof. Ivo Sócrates Moraes de Oliveira Página: 2
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
CAPÍTULO II – O que é a OpenCV?
1. Conceitos Iniciais da Biblioteca OpenCV
2. Módulos da Biblioteca OpenCV
3. Instruções Básicas de Instalação da Biblioteca no Linux
4. Compilando e Executando seus Programas 
1. Conceitos Iniciais da Biblioteca OpenCV
OpenCV é uma biblioteca open source (código aberto, licença BSD) de visão 
computacional, foi escrita em C e C++ e roda em diversos Sistemas Operacionais, entre eles: Linux, 
Windows e Mac OS X; e possui mais de 2500 algoritmos otimizados. 
O que é uma biblioteca em programação?
Biblioteca é uma coleção de subprogramas utilizados no desenvolvimento de software e possuem códigos 
e dados auxiliares, que provém serviços a programas independentes, o que permite o compartilhamento e 
a alteração de código e dados de forma modular.
Existe o desenvolvimento ativo de interface para outras linguagens, entre elas: Python, 
Ruby, Matlab e outras linguagens de programação. Um dos principais objetivos do OpenCV é 
oferecer uma infraestrutura de uso simples que permita o desenvolvimento de aplicações 
sofisticadas de visão computacional de modo rápido e simples. 
A biblioteca OpenCV oferece diversas funções a cerca da área da visão incluindo, inspeção 
de produtos em uma fábrica, imagens médicas, segurança, interface de usuário, calibragem de 
câmeras, visão estéreo e robótica. Por atuar conjuntamente, visão computacional e aprendizado de 
máquinas, o OpenCV contém também, diversas bibliotecas de Aprendizado de Máquina (MLL). 
Esta sub-biblioteca focalizou em reconhecimento de padrões e classificação estatístico. A MLL é 
altamente utilizada para tarefas de visão que é a missão principal do OpenCV, mas ele também é 
muito utilizada em alguns problemas de aprendizado de máquina.
Hoje desde programadores profissionais à cientistas da computação estão explorando a 
capacidade desta biblioteca para resolver problemas ou complementar seus sistemas. Uma empresa 
que faz uso do OpenCV é a Google, entre suas diversas aplicações o Google’s Street View faz uso 
Prof. Ivo Sócrates Moraes de Oliveira Página: 3
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
desta biblioteca, outras empresas conhecidas que possui adeptos ao OpenCV são: Microsoft, Intel, 
IBM, SONY e Siemens.
2. Módulos da Biblioteca OpenCV
A biblioteca OpenCV é dividida em vários módulos entre eles temos:
◦ O módulo opencv_core possui o núcleo das funcionalidades da biblioteca, ou seja, a 
estrutura de dados básica e as funções aritméticas.
◦ O módulo opencv_imgproc possui a principal função de processamento de imagem.
◦ O módulo opencv_highgui possui funções de escrita e leitura de vídeo e imagem, além 
de outras funções de interface de usuários. 
◦ O módulo opencv_features2d possui descritores e detectores de feature point e 
framework (ambiente) de combinação de feature point. 
◦ O módulo opencv_calib3d possui funções de calibração de câmeras, estimação 
geométrica de dupla visão e visão estéreo (profundidade). 
◦ O módulo opencv_video possui funções e classes de estimação de movimentos, 
rastreamento de características e extração por aproximação.
◦ O módulo opencv_objdetect possui funções de detecção de objetos, assim como: 
detectores de faces e pessoas.
A biblioteca inclui outros utilitários contendo funções de aprendizado de máquina, 
algoritmos de geometria computacional e código acelerador de GPU.
Todos estes módulos possuem um cabeçalho associados a eles, ou seja, um local que inclui o 
diretório. E, geralmente, um código do OpenCV C++ é incitado com as requisições dos módulos.
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp> 
Exemplos de requisições de módulos.
3. Instruções Básicas de Instalação da Biblioteca no Linux
A seguir é apresentado uma forma muito simples de instalação do OpenCV na versão 2.1, 
Prof. Ivo Sócrates Moraes de Oliveira Página: 4
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCVFLISOL 2012
esta versão não é a mais atual, contudo é a mais simples de instalar e satisfaz os requisitos 
necessários para compilar os códigos que serão apresentados posteriormente.
Em um computador com a distribuição Ubuntu Desktop 11.04 ou 11.10 abra no menu a 
Central de Programas do Ubuntu (Synaptic).
Após abrir a Central de Programas do Ubuntu (Synaptic) pesquise e instale os seguintes 
programas (caso qualquer um destes programas estejam instalados não se faz necessárias 
modificações):
◦ GCC (GNU C Compiler) “geralmente estará instalado”
◦ G++ (GNU C++ Compiler)
◦ libcv-dev 2.1.0-7build1
◦ libcvaux-dev 2.1.0-7build1
◦ libhighgui-dev 2.1.0-7build1
◦ gnome-mplayer 1.0.4-1ubuntu0.1 (Mplayer para GNOME)
◦ ffmpeg 4:0.7.3-0ubuntu0.11.10.1 (ffmpeg)
◦ gstreamer0.10-ffmpeg 0.10.12-1ubuntu1 (Gstreamer plug-in de vídeo ffmpeg)
Para instalar um programa da forma mais simples usando a Central de Programas do Ubuntu 
(Synaptic) é necessário que o computador esteja conectado a Internet, coloque o nome do programa 
desejado no campo de Pesquisa, no topo esquerdo, e depois selecione a opção “Instalar”.
Prof. Ivo Sócrates Moraes de Oliveira Página: 5
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
Prof. Ivo Sócrates Moraes de Oliveira Página: 6
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
4. Compilando e Executando seus Programas
Para compilar seus programas criados utilizando a biblioteca OpenCV, você poderá fazer 
uso de um script muito eficiente, o build_all.sh, que compilará todos os teus código C e C++ dentro 
da pasta em que ele for execultado. 
Logo, abra o terminal de comando (ambiente shell) do seu Sistema Operacional através do 
menu.
Faça logon como root, através do comando “su” e em seguida digite a senha do usuário root. 
Acesse a pasta onde você salvou os teus códigos-fonte e o script build_all.sh, Para isto use o 
comando “cd caminho_para_o_arquivo” algo do tipo “cd /home/usuario/Documentos/Códigos/”. 
Após abrir a pasta basta executar o comando sh build_all.sh para compilar todos os códigos-fonte 
presentes na pasta.
Para executar o programa basta digitar “./nome_do_arquivo_binario” algo do tipo 
“./codigo1”.
* Referências:
Bradski, G., Kaehler , A., Learning OpenCV , 1º Ed., Sebastopol : O’Reilly Media, Inc. , 2008.
Laganière, R. , OpenCV 2 Computer Vision Application Programming Cookbook , 
Birmingham : Packt Publishing Ltd ., 2011.
OpenCVWiki. OpenCV. Disponível em: http://opencv.willowgarage.com/wiki/ Acessado em: 
09/04/2012.
OpenCV-Wiki Start. OpenCV. Disponível em: http://code.opencv.org/projects/ 
OpenCV/wiki/WikiStart Acessado em: 09/04/2012.
Sourceforge. OpenCV Library. Disponível em: http://sourceforge.net/projects/opencvlibrary/ 
Acessado em: 09/04/2012.
Prof. Ivo Sócrates Moraes de Oliveira Página: 7
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
CAPÍTULO III – Implementações Básicas Usando o OpenCV
1. Lendo Arquivo de Imagem
2. Suavizando Imagens
3. Lendo Arquivo de Vídeo AVI
4. Editando Frames (Quadros) de um Vídeo AVI
5. Capturando Frames (Quadros) Através de uma WebCam
6. Gravando Frames (Quadros) Capturados por uma WebCam 
1. Lendo Arquivo de Imagem
Um grupo de ferramentas importante do OpenCV é o HighGUI ele permite a leitura de uma 
grande variedade de tipos de arquivo de imagem, vídeo e câmeras. Vamos iniciar nossas atividades 
através da leitura de alguns arquivos de imagens e vídeos.
Dado o código 1, apresentado a seguir, compile-o, posteriormente execute-o, lembrando que 
a imagem robot.jpg deverá estar na mesma pasta que o código apresentado. 
#include <stdio.h> // Biblioteca padrão do C++
#include "cv.h" //Biblioteca básica para execução de programas no OpenCV
#include "highgui.h" //Biblioteca para GUI no OpenCV
int main( int argc, char** argv ) {
IplImage* img = cvLoadImage("robot.jpg"); // Chama uma imagem.
cvNamedWindow( "Robô", CV_WINDOW_AUTOSIZE ); // Cria uma moldura adaptável para a imagem
cvShowImage( "Robô", img ); // Apresenta a imagem na moldura criada
cvWaitKey(3000); //define o tempo de apresentação da imagem, no caso de 0 fica até que seja 
pressionada qualquer tecla.
cvReleaseImage( &img ); // Não é essencial, porém desaloca o ponteiro da memória
cvDestroyWindow( "Robô" ); // Não é essencial, porém desaloca a moldura criada
}
Código 1: Lê arquivo de imagem.
Este programa carrega uma imagem na memória e exibe na tela. Em seguida, espera o tempo 
definido "cvWaitKey" para fechar a janela e sair. Se "cvWaitKey" possuir o valor 0 então a janela 
ficará aberta até que qualquer tecla seja pressionada. O "cvLoadImage" é compatível com os 
Prof. Ivo Sócrates Moraes de Oliveira Página: 8
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
seguintes formatos: BMP, DIB, JPEG, JPE, PNG, PBM, PGM, PPM, SR, RAS e TIFF.
2. Suavizando Imagens
Veremos como fazer um tratamento básico em uma imagem lida pelo nosso programa. O 
tratamento consiste na aplicação de um filtro gaussiano.
Dado o código 2, apresentado a seguir, compile-o, posteriormente execute-o, lembrando que 
a imagem robot.jpg deverá estar na mesma pasta que o código apresentado. 
#include <stdio.h> // Biblioteca padrão do C++ 
#include "cv.h" //Biblioteca básica para execução de programas no OpenCV 
#include "highgui.h" //Biblioteca para GUI no OpenCV 
int main( int argc, char** argv ) { 
IplImage* image = cvLoadImage("robot.jpg"); // Chama uma imagem. 
cvNamedWindow( "Robô­Entrada", CV_WINDOW_AUTOSIZE ); // Cria uma moldura adaptável para a 
imagem de entrada 
cvNamedWindow(  "Robô­Saida", CV_WINDOW_AUTOSIZE  ); // Cria uma moldura adaptável  para a 
imagem de saída 
cvShowImage( "Robô­Entrada", image ); // Apresenta a imagem original na moldura criada 
IplImage* out = cvCreateImage( 
cvGetSize(image), 
IPL_DEPTH_8U, 
3 
); // Aloca um novo quadro estruturado para receber as modificações de suavização, o 
primeiro argumento define a dimensão da estrutura, o segundo argumento define o tipo de dados para 
cada canal em cada pixel e o último argumento o número de canais que serão utilizados. Logo, esta 
imagem é de três canais (com 8 bits por canal) e é do mesmo tamanho da imagem original. 
cvSmooth( image, out, CV_GAUSSIAN, 3, 3 ); //Operação de suavização, o primeiro argumento 
recebe a imagem original, o segundo representa a estrutura da imagem que será criada e que vai 
receber a imagem original suavizada, o terceiro argumento apresenta a tipo de suavização que é 
Gaussian, na área 3x3 centralizada em cada pixel. 
cvShowImage( "Robô­Saida", out ); // Apresenta a imagem suavizada na moldura criada 
cvReleaseImage( &out ); // Não é essencial, porém desaloca o ponteiro da memória 
cvWaitKey( 0 ); //define o tempo de apresentação da imagem, no caso de 0 fica até que seja 
pressionada qualquer tecla. 
cvDestroyWindow( "Robô­Entrada" ); // Não é essencial, porém desaloca a moldura criada 
cvDestroyWindow( "Robô­Saida" ); // Não é essencial, porém desaloca a moldura criada
 
}
Código 2: Lê arquivo de imagem e realiza uma suavização na mesma.
Prof. Ivo Sócrates Moraes de Oliveira Página: 9
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
Este programa carrega uma imagem na memória e cria uma nova imagem suavizada exibe na ambas 
as imagens na tela. 
3. Lendo Arquivo de Vídeo AVI
Veremos como realizar a leitura e apresentação de um arquivo de vídeo.
Dado o código 3, apresentado a seguir, compile-o, posteriormente execute-o, lembrando que 
o vídeo robot.avi deverá estar na mesma pasta que o códigoapresentado. 
#include <stdio.h> // Biblioteca padrão do C++ 
#include "cv.h" //Biblioteca básica para execução de programas no OpenCV 
#include "highgui.h" //Biblioteca para GUI no OpenCV 
int main( int argc, char** argv ) { 
CvCapture* capture = cvCreateFileCapture( "robot.avi" ); // Chama um vídeo especificado 
cvNamedWindow( "Filme AVI", CV_WINDOW_AUTOSIZE ); // Cria uma moldura adaptável para o vídeo 
IplImage* frame; //Instancia uma variável baseada na IPL (Biblioteca de Processamento de 
Imagem) para pegar as propriedades básicas do vídeo capturado. 
while(1) { // Fica rodando infinitamente até que não acha mais frames (quadros) que formem o 
vídeo ou até que seja digitada a tecla "ESC". 
frame = cvQueryFrame( capture ); //Consulta (pega) o quadro capturado 
if( !frame ) break; //Condicional que aponta que não há mais frames para serem lido 
cvShowImage( "Filme AVI", frame );// Apresenta o quadro na moldura criada 
char c = cvWaitKey(33); //Variável que determina um tipo de entrada do teclado, 
servirá para permitir a interrupção da execução do vídeo. 
if(   c   ==   27   )   break;   //Condicional   que   aponta   que   uma   determinada   tecla   foi 
pressionada e a reprodução do vídeo deve ser interrompida 
} 
cvReleaseCapture( &capture ); // Não é essencial, porém desaloca o ponteiro da memória 
cvDestroyWindow( "Filme AVI" ); // Não é essencial, porém desaloca a moldura criada 
}
Código 3: Lê arquivo de vídeo AVI.
Este programa carrega uma sequência de frames para memória e apresenta-o. 
4. Editando Frames (Quadros) de um Vídeo AVI
Prof. Ivo Sócrates Moraes de Oliveira Página: 10
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
Veremos como realizar uma modificação a partir de um vídeo AVI e salvar este vídeo 
modificado.
Dado o código 4, apresentado a seguir, compile-o, posteriormente execute-o, lembrando que 
o vídeo robot.avi deverá estar na mesma pasta que o código apresentado. 
#include <stdio.h> // Biblioteca padrão do C++ 
#include "cv.h" //Biblioteca básica para execução de programas no OpenCV 
#include "highgui.h" //Biblioteca para GUI no OpenCV 
int main( int argc, char** argv ) { 
CvCapture* capture = cvCreateFileCapture( "robot.avi" ); // Chama um vídeo especificado 
if(!capture){ // 
return ­1; 
} 
IplImage *bgr_frame=cvQueryFrame(capture);//Inicia a leitura do vídeo 
double fps = cvGetCaptureProperty ( capture, CV_CAP_PROP_FPS ); // função que vai capturar a 
quantidade de frames por segundo que o vídeo AVI possui 
CvSize size = cvSize( 
(int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH), 
(int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT) 
); //Função que vai capturar a dimensão dos frames que compõe o vídeo 
CvVideoWriter *writer = cvCreateVideoWriter( 
"robot2.avi", 
CV_FOURCC('D','I','V','X'), 
fps, 
size 
); //Função que define o nome do novo vídeo AVI, o CODEC que ele irá utilizar, 
quantidade de quadros por segundo e a dimensão espacial do vídeo que será criado 
IplImage* logpolar_frame = cvCreateImage( 
size, 
IPL_DEPTH_8U, 
3 
); // Aloca um novo quadro estruturado para receber as modificações do frame do 
vídeo, define a dimensão da estrutura, o tipo de dados para cada canal em cada pixel e o número de 
canais que serão utilizados. Logo, este frame é de três canais (com 8 bits por canal) e é do mesmo 
tamanho do frame original. 
while( (bgr_frame=cvQueryFrame(capture)) != NULL ) { //Consulta (pega) o frame capturado 
enquanto existir frames para serem lidos 
cvLogPolar( 
bgr_frame, 
logpolar_frame, 
cvPoint2D32f(bgr_frame­>width/2, bgr_frame­>height/2), 
90, 
CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS 
Prof. Ivo Sócrates Moraes de Oliveira Página: 11
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
);//Função de conversão log­polar, onde é apresentado o frame de original, a 
variável que receberá o frame modificado, o centro da modificação, escala da modificação e métodos 
de combinação de interpolação. 
cvWriteFrame( writer, logpolar_frame); // Função que vai escrever (adicionar) o frame 
modificado no vídeo que será criado 
} 
cvReleaseVideoWriter( &writer ); // Não é essencial, porém desaloca o ponteiro da memória 
cvReleaseImage( &logpolar_frame ); // Não é essencial, porém desaloca o ponteiro da memória 
cvReleaseCapture( &capture ); // Não é essencial, porém desaloca o ponteiro da memória 
return(0); 
}
Código 4: Lê arquivo de vídeo AVI edita-os e salva as modificações.
Este programa carrega uma sequência de frames para memória, realiza uma edição e grava o vídeo 
editado. 
5. Capturando Frames (Quadros) Através de uma WebCam
Veremos como podemos capturar frames de uma WebCam instalada no computador e 
apresentar o que esta sendo capturado. 
Dado o código 5, apresentado a seguir, compile-o, posteriormente execute-o, lembrando que 
o computador deverá possui uma WebCam instalada. 
#include <stdio.h> // Biblioteca padrão do C++ 
#include "cv.h" //Biblioteca básica para execução de programas no OpenCV 
#include "highgui.h" //Biblioteca para GUI no OpenCV 
int main( int argc, char** argv ) { 
CvCapture* capture = cvCaptureFromCAM(0); 
if(!capture){ 
printf("Não foi possível iniciar captura...\n"); 
return ­1; 
} 
cvNamedWindow("video", CV_WINDOW_AUTOSIZE); // Cria uma moldura adaptável para a sequência 
de frames que será capturada 
while(1){ // Fica rodando infinitamente até que não acha mais como ler frames da WebCam ou 
até que seja digitada a tecla "ESC". 
IplImage* frame = cvQueryFrame(capture); //Realiza a leitura do frame da WebCam 
if( !frame ) break; //Condicional que aponta que não há mais frames para serem lido 
cvShowImage("video", frame); // Apresenta o frame obtido da WebCam na moldura criada 
     char c = cvWaitKey(33); //Variável que determina um tipo de entrada do teclado, 
servirá para permitir a interrupção da captura. 
Prof. Ivo Sócrates Moraes de Oliveira Página: 12
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
if(   c   ==   27   )   break;   //Condicional   que   aponta   que   uma   determinada   tecla   foi 
pressionada e a reprodução do vídeo deve ser interrompida 
     } 
      cvReleaseCapture(&capture); // Não é essencial, porém desaloca o ponteiro da memória 
}
Código 5: Lê frames capturados por uma WebCam instalada no computador e apresenta-os.
Este programa apresenta os frames obtidos por uma WebCam, este programa pode ser adaptado 
para receber frames de mais de uma WebCam, adicionando novas entradas cvCaptureFromCAM(), 
só que com argumentos diferentes, pois eles identificam a WebCam. 
6. Gravando Frames (Quadros) Capturados por uma WebCam
Veremos como podemos gravar os frames capturados de uma WebCam instalada no 
computador. 
Dado o código 6, apresentado a seguir, compile-o, posteriormente execute-o, lembrando que 
o computador deverá possui uma WebCam instalada. 
#include <stdio.h> // Biblioteca padrão do C++ 
#include "cv.h" //Biblioteca básica para execução de programas no OpenCV 
#include "highgui.h" //Biblioteca para GUI no OpenCV 
int main( int argc, char** argv ) { 
CvVideoWriter *writer = 0; // Cria o ponteiro que vai receber o vídeo da WebCam 
int fps = 25;  
int frameW = 640; 
int frameH = 480; 
writer=cvCreateVideoWriter("out.avi",CV_FOURCC('P','I','M','1'),fps,cvSize(frameW,frameH)); //Função 
que define o nome do vídeo capturado pela WebCam, o CODEC que ele irá utilizar, quantidade de 
quadros por segundo e a dimensão espacial do vídeo que será criado 
IplImage* img = 0; 
int nFrames = 50; 
char c; 
printf( "Tecla do Menu: \n" 
"\tESC ­ sair do programa\n" 
);CvCapture* capture = cvCaptureFromCAM(0); //Estrutura para capturar um vídeo de uma WebCam 
IplImage *frame, *frame_copy = 0; //Imagens para capturar o frame da câmera 
cvNamedWindow( "WebCam", 1); // Cria uma moldura adaptável para a sequência de frames que 
será capturada 
Prof. Ivo Sócrates Moraes de Oliveira Página: 13
CRIANDO SEU PRIMEIRO PROGRAMA DE VISÃO COM OPENCV FLISOL 2012
if( capture ) { 
for(;;) { // Fica rodando infinitamente até que não acha mais como ler frames da 
WebCam ou até que seja digitada a tecla "ESC". 
if( !cvGrabFrame( capture )) break; //Captura  o frame e se não conseguir 
carregar finaliza 
frame = cvRetrieveFrame( capture ); //Carrega o frame 
if( !frame ) break; //Condicional que aponta que não há mais frames para 
serem lido 
if(   !frame_copy   )   frame_copy   =   cvCreateImage(   cvSize(frame­>width,frame­
>height), IPL_DEPTH_8U, frame­>nChannels ); 
if( frame­>origin == IPL_ORIGIN_TL ) cvCopy( frame, frame_copy, 0 ); 
else cvFlip( frame, frame_copy, 0 ); 
cvShowImage( "WebCam", frame_copy ); // Apresenta o frame obtido da WebCam na 
moldura criada 
cvWriteFrame(writer, frame_copy); // Função que vai escrever (adicionar) o 
frame recebido pela WebCam no vídeo que será criado 
c = cvWaitKey(10); 
if (c=='\x1b'){ 
printf("Saindo ...\n"); 
goto exit_prog; 
} //Condicional  que aponta que uma determinada  tecla foi pressionada  e a 
reprodução do vídeo deve ser interrompida 
} 
exit_prog: 
cvReleaseImage(  &frame_copy  ); // Não  é essencial,  porém desaloca  o ponteiro  da 
memória 
cvReleaseCapture(   &capture   );   //   Não   é   essencial,   porém   desaloca   o   ponteiro   da 
memória 
cvReleaseVideoWriter(&writer);   //   Não   é   essencial,   porém   desaloca   o   ponteiro   da 
memória 
} 
cvDestroyWindow("WebCam"); // Não é essencial, porém desaloca a moldura criada 
} 
Código 6: Lê frames capturados por uma WebCam instalada no computador, apresenta-os e 
grava.
Este programa apresenta os frames obtidos por uma WebCam e os gravam com o nome saida.avi. 
* Referências:
Bradski, G., Kaehler , A., Learning OpenCV , 1º Ed., Sebastopol : O’Reilly Media, Inc. , 2008.
 
Prof. Ivo Sócrates Moraes de Oliveira Página: 14
	CAPÍTULO I – O que é Visão Computacional?
	1. Conceitos Iniciais de Visão
	2. Visão Computacional
	CAPÍTULO II – O que é a OpenCV?
	1. Conceitos Iniciais da Biblioteca OpenCV
	2. Módulos da Biblioteca OpenCV
	3. Instruções Básicas de Instalação da Biblioteca no Linux
	4. Compilando e Executando seus Programas
	CAPÍTULO III – Implementações Básicas Usando o OpenCV
	1. Lendo Arquivo de Imagem
	2. Suavizando Imagens
	3. Lendo Arquivo de Vídeo AVI
	4. Editando Frames (Quadros) de um Vídeo AVI
	5. Capturando Frames (Quadros) Através de uma WebCam
	6. Gravando Frames (Quadros) Capturados por uma WebCam