Abrir y guardar vídeos
Abrir y guardar vídeos
Entre las funcionalidades de entrada/salida de OpenCV tambien está la de abrir y guardar vídeos. Al igual que en el caso de las imágenes, las funciones son bastante simples y no supone una gran dificultad su uso. Sin embargo, y a diferencia de lo que ocurre con las imágenes, si puede ser más problemático el formato de los vídeos, pues dependiendo del sistema operativo en el que se ejecute OpenCV y de los codecs instalados, admitirá un formato de vídeo u otro. Para más información sobre los codecs y formatos que admite OpenCV podeis consultar este enlace. Si se tiene algún tipo de problema con los codecs de vídeo, consulta este enlace para ver como instalarlos en ubuntu.
Una vez hechos estos comentarios, se indicará como abrir y guardar vídeo usando OpenCV:
- Abrir un vídeo. Para abrir un vídeo se usa la clase cv::VideoCapture. La clase VideoCapture admite como parámetro de entrada el nombre del fichero de vídeo a abrir ( cv::VideoCapture("video.avi") ). Como un caso particular de flujo de vídeo, esta misma clase tambien puede abrir una cámara que esté conectada al ordenador. Para eso se pasa como parámetro un número ( cv::VideoCapture(0) ) que será el número de cámara (si solo hay una cámara conectada al ordenador, será la 0, si hay 2 pues la 0 o la 1...). Así de sencillo se consigue abrir un vídeo o una cámara conectada al ordenador. Para capturar las imágenes ahora tan solo hace falta haber definido una imagen (imagenCamara) y capturar con: streamCapture >> imagenCamara;
- Guardar un vídeo. Para guardar un vídeo, se usa la clase cv::VideoWriter. El constructor de la clase videoWriter es más complejo que el de la clase anterior, porque en este caso hay que indicar el fichero en el que se va a guardar el vídeo, el codec a usar para guardarlo, los fotogramas por segundo, la resolución del vídeo, y si el vídeo es en color o en escala de grises. Una vez definidos todos estos parámetros, el guardar un fotograma no tiene mayor complicación que en el caso de la captura. Así pues, y partiendo de una imagen ya definida e inicializada, simplemente hay que hacer: streamWriter << imagenAGuardar. Un ejemplo de apertura de vídeo de salida sería:
cv::Mat imagenAGuardar(240, 320, CV_8UC3);cv::VideoWriter( "videoSalida.avi", CV_FOURCC('x','v','i','d'), 25, imagenAGuardar.size() ,1);streamWriter << imagenAGuardar;
Un ejemplo práctico...
Veremos ahora un ejemplo práctico antes de continuar. Antes que nada, descarga el programa pinchando en este enlace, descomprímelo y , en consola, ejecuta desde el directorio de descompresión make, y HelloVideoOpenCV. A continuación verás una ventana como ésta:
Tareas:
- Mirar el código de ejemplo HelloVideoOpenCV.cpp con detenimento y comprender su funcionamiento.
- Reconocer que se está haciendo en cada punto e identificar las funciones explicadas hasta el momento.