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;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.
using namespace std;
/*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