OpenCV - Utilizando a WebCam

Utilizando Web Cam



Olá galera, daremos nossos primeiros passos com o uso da webcam com OpenCV, faremos algo simples nessse tutorial como receber os dados que veem de sua webcam e mostrar as imagens na tela, o resultado obtido será a saída de sua webcam  dessa maneira:




Crie uma pasta chamada Deteccao_intruso dentro de seu diretório OpenCV, no meu caso é OpenCV/opencv/meus_apps, logo a seguir crie um arquivo chamado detec.cpp, logo após copie o seguinte código, em seguida detalharemos o algoritmo:


#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui_c.h>


using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    /*pegando a webcam padrao*/
    CvCapture* webcam = cvCaptureFromCAM(0);
    //criando uma janela
    cvNamedWindow("Identificador", CV_WINDOW_AUTOSIZE);
   
    IplImage* imagem;//variavel para guardar a imagem recebida da webcam
   
    while(1){//loop para atualizacao da imagem recebida
        /*recebe a imagem da camera*/
        imagem = cvQueryFrame(webcam);
       
        if(!imagem) break;//se nao houver imagem saia do loop
        //mostre a imagem
        cvShowImage("Identificador", imagem);//recebe o nome de uma janela e o nome da imagem a ser mostrada
       
        /*aguarda a tecla esc ser apertada se for sai do loop*/
        char c = cvWaitKey(33);
        if(c == 27) break;
    }
       
    cvReleaseCapture(&webcam);
    cvDestroyWindow("Identificador");
   
    return 0;
}

Agora crie um arquivo chamado CMakeLists.txt  e cole o seguinte script:

cmake_minimum_required(VERSION 2.8)
project(Deteccao_intruso)
find_package(OpenCV REQUIRED)
add_executable(detec detec.cpp)
target_link_libraries(detec ${OpenCV_LIBS})

Vamos executar e ver o resultado, para isso dentro da mesma pasta abra o terminal e digite os seguintes comandos:

cmake .
make
./detec

  Explicação:

#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui_c.h>
 Nessas três primeiras linhas é apenas inclusão de bibliotecas necessárias para entrada e saída padrão em C++, biblioteca do opencv para utilizar suas funções.

using namespace cv;
using namespace std;
 
Inclusão de namespace para não precisar colocar a biblioteca na frente de toda chamada de função como exemplo: std::cout, ao invés disso apenas escrevemos cout.

 /*pegando a webcam padrao*/
    CvCapture* webcam = cvCaptureFromCAM(0);
    //criando uma janela
    cvNamedWindow("Identificador", CV_WINDOW_AUTOSIZE);
   
Na primeira linha criamos um objeto ponteiro para CvCapture que realiza uma captura de imagem, nesse caso recebemos a imagem da webcam, passando o argumento (0), para cvCaptureFromCAM significa que a as imagens processadas veem da webcam padrão, caso esteja em um computador e tenha mais de uma webcam plugada, poderia colocar (1) que iria para a segunda webcam e assim sucessivamente. Na sequencia criamos uma janela chamada Identificador com um tamanho padrão. Essa janela é onde sairá as imagens captadas pela webcam.

IplImage* imagem;//variavel para guardar a imagem recebida da webcam
   
    while(1){//loop para atualizacao da imagem recebida
        /*recebe a imagem da camera*/
        imagem = cvQueryFrame(webcam);


Criamos um ponteiro para guardar a imagem recebida da webcam, logo em seguida entramos no loop infinito para poder atualizar as imagens recebidas da webcam, guardamos a seguir os dados recebidos da webcam dentro de imagem.

if(!imagem) break;//se nao houver imagem saia do loop
        //mostre a imagem
cvShowImage("Identificador", imagem);//recebe o nome de uma janela e o nome da imagem a ser mostrada

Na primeira linha verificamos se recebemos alguma imagem da webcam caso não tenha recebido encerra o loop.  Caso tenha conseguido, na linha abaixo mostramos uma janela , passando o nome da janela a ser exibida e o conteúdo que queremos exibir no nosso caso imagem.

    /*aguarda a tecla esc ser apertada se for sai do loop*/
        char c = cvWaitKey(33);
        if(c == 27) break;

Criamos um char que recebe uma tecla e se esse caractere for 27 ou seja a tecla esc, o programa é encerrado.

cvReleaseCapture(&webcam);
cvDestroyWindow("Identificador");

Por último o espaço reservado na memória é liberado, na primeira linha liberamos a webcam e na segunda a janela criada.
É isso espero que tenham gostado. Deixem suas dúvidas nos comentários. Até a próxima.


0 comentários:

Postar um comentário