Título: error bad flag Publicado por: boticheliss en 17 Enero 2011, 11:10 am Hola quiero hacer un programa en Windows con Codeblocks utilizando las librerias de Opencv que reproduzca dos videos a la vez, uno en RGB y el otro en escala de grises.Cuando yo compilo el programa se genera el ejecutable y las 2 ventanas para reproducir los videos se abren pero no se llega a reproducir nada y aparece el siguiente error en una ventana:
" bad flag(parameter or structure field) (Unrecognized or unsupported array type) in function cvGETMAT, .\cxarray.cpp(2882) ¿A que se debe esto? El codigo es el siguiente: #include <stdio.h> #include <cv.h> #include <cxcore.h> #include <highgui.h> #include "comun.h" #define fOriginal "OpenCV player" #define fGris "OpenCV player gris" int main(int argc, char* argv[]) { int tecla, i, j; IplImage *imgOrg, *imgGris; CvSize imgSize; // size of visualisation image CvCapture* videoOrg; char nomVideoOrg[1024]; double fps, tiempoEntreCuadros; int salir, // Controla la condición de terminación de la aplicación parar; // La reproducc. del vídeo. long int nCuadro = 0; cvInitSystem( argc, argv ); printf("%s [OpenCV version %s]\n", argv[0], CV_VERSION ); printf("Va, %s en <%s>!\n", argv[0], (argc>1? argv[1]: "")); //Comprobamos si han pasado un vídeo como parámetro, sino uno por defecto sprintf( nomVideoOrg, "%s", (argc > 1? argv[1] : "laser.avi") ); if (nomVideoOrg == NULL) { fprintf(stderr, "Problemas con el fichero de vídeo: %s.\n", nomVideoOrg ); return( 1 ); } videoOrg = cvCreateFileCapture( nomVideoOrg ); if (videoOrg == NULL) { fprintf(stderr, "Problemas abriendo el fichero de vídeo >%s<\n", nomVideoOrg ); return( 2 ); } printf("Mostrando el contenido de la fuente de vídeo: >%s<\n \ ESC, q, Q - Salir.\n \ i/I - reIniciar el vídeo\n\ s/S - parar/continuar el vídeo\n", nomVideoOrg ); imgOrg = cvQueryFrame( videoOrg ); cvCvtColor(imgOrg,imgGris,CV_BGR2GRAY); if (imgOrg == NULL) { fprintf(stderr, "Problemas obteniendo imágenes en %s\n", nomVideoOrg ); return( 3 ); } nCuadro++; cvNamedWindow( fOriginal, CV_WINDOW_AUTOSIZE ); cvShowImage( fOriginal, imgOrg ); cvNamedWindow( fGris, CV_WINDOW_AUTOSIZE ); cvShowImage( fGris, imgGris); imgSize.width = imgOrg->width; imgSize.height = imgOrg->height; fps = cvGetCaptureProperty( videoOrg, CV_CAP_PROP_FPS ); if (fps == 0.0) fps = 25; tiempoEntreCuadros = 1000.0 / fps; salir = FALSE; parar = FALSE; while ( !salir ) { if (parar == FALSE) { cvShowImage( fOriginal, imgOrg ); cvShowImage( fGris, imgGris ); nCuadro++; fprintf(stdout, "%ld\r", nCuadro ); fflush( stdout ); } tecla = cvWaitKey( tiempoEntreCuadros ) & 255; switch ( tecla ) { case ESC: case 'q': case 'Q': // Si 'ESC', q ó Q, ¡acabar! // fprintf(stderr, "Acabando ...\n" ); salir = TRUE; break; case 'i': // Reiniciar case 'I': cvReleaseCapture( &videoOrg ); videoOrg = cvCreateFileCapture( nomVideoOrg ); if (videoOrg == NULL) { fprintf(stderr, "Problemas abriendo el fichero de vídeo >%s<\n", nomVideoOrg ); return( 2 ); } parar = FALSE; // fprintf(stderr, "Reiniciando ...\n" ); break; case 's': // Stop case 'S': // fprintf(stderr, "Parar/continuar %d ...\n", parar ); parar = !parar; break; default: ; // fprintf(stdout, "Se ha pulsado la tecla %c (código %d)\n", tecla, tecla); } // Fin de "switch ( tecla )" if (parar == FALSE) if (cvGrabFrame (videoOrg)) imgOrg = cvQueryFrame( videoOrg ); // Esta imgOrg es interna a OpenCV: no modificarla. // Para hacer cambios, generar una copia y trabajar sobre esta // if (cvGrabFrame (videoOrg)) {imgAux=cvQueryFrame(videoOrg); imgOrg=cvClone(imgAux); ...} if ((parar == FALSE) AND (imgOrg == NULL)) { parar = TRUE; fprintf(stdout, "Fi del fitxer: ESC para terminar o 'i' para reiniciar. " ); fflush( stdout ); } } // Fin de for(;;) //cvWaitKey( 0 ); cvReleaseCapture( &videoOrg ); cvDestroyAllWindows( ); // No hace falta liberar la "imgOrg", ya que es una copia interna // cvReleaseImage( &imgOrg ); return 0; }// Fin de "main" // // Fi de fitxer "opencv_player" // |