OpenCv - Reprodução de videos


Nos últimos tutoriais vimos como trabalhar com imagens e com captura de imagens vindas da webcam, hoje cobriremos a reprodução de vídeos. 
Para reproduzir videos usaremos o objeto VideoCapture o mesmo utilizado para exibir os frames vindos da camera. Observe o exemplo abaixo e logo após veremos o que está acontecendo:


main.cpp

// Bibliotecas necessarias do opencv
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace std;
using namespace cv;
int main(int argc, const char** argv)
{
VideoCapture cap; //endereço do video
cap.open("suicidesquad.mp4");
//criacao da janela
namedWindow("Video", 1);
//reproduzindo o video
for(;;)
{
Mat frame;
cap >> frame; //pega um novo frame do video //exibe o frame
imshow("Video", frame);
if(waitKey(30) >= 0) break;
}
// Libera o espaço alocado pelo VideoCapture
cap.release();

return 0;
}


Entendendo o Código

A primeira coisa que precisamos fazer é incluir as bibliotecas necessárias para o projeto, utilizamos a biblioteca gráfica para trabalhar com janelas highgui e incluimos a biblioteca padrão do opencv core:

//Bibliotecas do opencv #include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"

Logo após criarmos o objeto, precisamos indicar qual é o caminho do video que desejamos reproduzir, para isso utilizamos o método open("caminho do video") , caso deseje verificar se foi possivel encontrar ou abrir o arquivo informado poderia utilizar cap.isOpened(), que retorna true ou false. 

VideoCapture cap; cap.open("suicidesquad.mp4");
O proximo passo é exibir os frames vindos do video, para isso, criamos uma janela com a função namedWindow, e a partir do nosso loop infinito, recebemos cada frame do video com o operador >>, por fim exibimos o frame com a função imshow. Com a função waitKey(30),  aguardamos 30 milisegundos para verificar se o usuário deseja encerrar a aplicação apertando qualquer tecla.

//criacao da janela namedWindow("Video", 1);
//reproduzindo o video
for(;;)
{
Mat frame;
cap >> frame; //pega um novo frame do video //exibe o frame
imshow("Video", frame);
if(waitKey(30) >= 0) break;
}
// Libera o espaço alocado pelo VideoCapture
cap.release();

return 0;

Agora precisamos criar um arquivo cmake e indicar nossas dependências para compilarmos nosso programa. Crie um arquivo chamado CMakeLists.txt, em seguida adicione o seguinte código:

cmake_minimum_required (VERSION 2.6) cmake_policy(SET CMP0012 NEW)
PROJECT(read_video)
# Requires OpenCV
FIND_PACKAGE( OpenCV REQUIRED )
MESSAGE("OpenCV version : ${OpenCV_VERSION}")
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_LIB_DIR})
ADD_EXECUTABLE( read_video main.cpp )
TARGET_LINK_LIBRARIES( read_video ${OpenCV_LIBS} )

Compilando e Rodando

  1. Crie uma pasta chamada read_video em opencv-3.0.0/apps.
  2. Copie os arquivos main.cppCMakeLists.txt que criamos acima para a pasta read_video junto com o video que deseja exibir.
  3. Com a pasta read_video aberta no terminal digite cmake . e logo após make para gerar nosso executável.
  4. Por último digite ./read_video  

Voce verá uma janela que exibirá o video escolhido em RGB, como o exemplo a seguir: 




Baseado em: OpenCv By Example
Código fonte: read_video

Até a próxima!


0 comentários:

Postar um comentário