Tener un AVI videofile, y una webcam. cvQueryFrame
devuelve null en ambos casos. El código se aplica(sólo para cam):
#include "highgui.h"
#include <iostream>
using namespace std;
int main( int argc, char** argv )
{
cvNamedWindow( "KillCam", CV_WINDOW_AUTOSIZE );
cvWaitKey(0);
CvCapture* capture = cvCreateCameraCapture(-1);
assert(capture != NULL);
IplImage* frame;
while(1){
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( "KillCam", frame );
char c = cvWaitKey(33);
if( c == 30 ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "KillCam" );
}
- Solo un presentimiento: trate de usar el índice 0 para la cámara. También compruebe que la cámara está correctamente instalado (se puede usar de aplicaciones?) Y de que ninguna otra aplicación es en la actualidad el uso de la cámara.
- Encontrar la solución ya. Parece que el primer fotograma(s) no se no se muestra tan
if( !frame ) break;
termina la visualización del vídeo antes de que comience. Pero el problema sigue siendo relevante para la recuperación de vídeo de archivo.
He encontrado, por entrar en el openCV código, que necesitaba para asegurar el fmpeg dll estaba presente en el directorio de trabajo actual en tiempo de ejecución:
OpenCV no arrojar ningún tipo de advertencia si este archivo dll no se encuentra, en lugar de la captura de crear la llamada sólo devuelve NULL.
hth
Si
Comprobar el formato de vídeo. OpenCV puede ser exigente en el que los códecs que soporta; no funciona con Xvid, por ejemplo. Usted puede encontrar una lista de códecs compatibles en el OpenCV wiki