Este artículo tiene como objetivo aprender cómo mostrar un video en OpenCV. Hacerlo es una tarea simple como mostrarse como una sola imagen. Pero aquí, esta visualización de fotogramas debe leerse en bucle como parte de la secuencia.
Comprendamos el proceso completo línea por línea en detalle.
Código:
CvCapture* capture = cvCreateFileCapture("...input\\video_file.avi");
La función cvCreateFileCapture() toma el nombre/ruta del archivo AVI del video (para ser cargado como parámetro). Luego se devuelve un puntero a una estructura CvCapture. Toda la información sobre el archivo de video está contenida en esta estructura. La estructura CvCapture se inicializa al comienzo del video cuando se crea de esta manera.
Código:
frame = cvQueryFrame(capture);
La lectura del archivo de video comienza una vez que está dentro del ciclo while(1). Un puntero a una estructura CvCapture es tomado como argumento por cvQueryFrame(). Luego, el siguiente cuadro de video se toma en la memoria, que en realidad es parte de la estructura de CvCapture. Y ese marco en particular requiere el puntero. cvQueryFrame usa la memoria ya asignada presente en la estructura CvCapture, a diferencia de cvLoadImage que asigna memoria real para la imagen. Por lo tanto, no es necesario llamar a cvReleaseImage() para este puntero de «marco». Cuando se libera la estructura de CvCapture, se libera la memoria de la imagen del cuadro.
Código:
c = cvWaitKey(10); if (c == 27) break;
Esperando 10 ms después de que se muestre el cuadro. c se establecerá en el valor ASCII de la tecla presionada si un usuario presiona esa tecla en particular. De lo contrario, se establece en ‘-1’. Si el usuario presiona la tecla ESC (que tiene un valor ASCII de 27), el código saldrá del ciclo de lectura. De lo contrario, después de 10 ms, el ciclo se ejecuta nuevamente.
Código: Mostrar video usando OpenCV.
// Using OpenCV to display video #include <highlevelmonitorconfigurationapi.h> #include <opencv2\highgui\highgui.hpp> #include <opencv2\opencv.hpp> using namespace cv; using namespace std; iint main(int argc, char** argv) { // creating window cvNamedWindow("Display_video", CV_WINDOW_AUTOSIZE); // loading video CvCapture* capture = cvCreateFileCapture("..input\\tree.avi"); IplImage* frame; while (1) { frame = cvQueryFrame(capture); if (!frame) break; cvShowImage("Display_video", frame); char c = cvWaitKey(0); if (c == 27) break; } cvReleaseCapture(&capture); // destroying window cvDestroyWindow("Display_video"); }
Producción :
VIDEO OUTPUT IN THE DISPLAY WINDOW
En el código anterior, en realidad estamos controlando la velocidad del video de una manera muy inteligente, solo confiamos en el temporizador en cvWaitKey() para controlar el ritmo de carga de los cuadros.
Publicación traducida automáticamente
Artículo escrito por mathemagic y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA