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
- Crie uma pasta chamada read_video em opencv-3.0.0/apps.
- Copie os arquivos main.cpp e CMakeLists.txt que criamos acima para a pasta read_video junto com o video que deseja exibir.
- Com a pasta read_video aberta no terminal digite cmake . e logo após make para gerar nosso executável.
- 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