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:
Até a próxima!