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 logpolar, 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