recopilar_video_camara_1394

Como captrar video y "arreglar" lidiar con el problema del barrido de algunas cámaras análogas
code format="cpp" //#include 
 * 1) include 
 * 2) include 
 * 3) include 
 * 1) include 
 * 2) include 
 * 3) include 
 * 4) include 

/*funcion para capturar los fps de la cámara de video*/ double framespersec(CvCapture* lacaptura){ double timestamp = 0,timestamp2=0; int freim=0; double duraciondelcuadro=0; IplImage* imagensuperimportanteparafps=NULL; int cuadros_esperados=30; int N=5*cuadros_esperados;//dura aproxx 5 segundos cvNamedWindow("imagen de ejemplo",1); for(int frames=0;frames<=N;frames++) {		timestamp = ((double)clock/CLOCKS_PER_SEC); imagensuperimportanteparafps = cvQueryFrame(lacaptura); timestamp2 = ((double)clock/CLOCKS_PER_SEC); //printf("la duración del cuadro mas o menos fué: %f \n",timestamp2-timestamp); freim++; //timestamp=timestamp/freim; //printf("la duración del cuadro mas o menos fué: %f \n",timestamp); duraciondelcuadro+=(timestamp2-timestamp); //printf("la duración del cuadro mas o menos fué: %f \n",duraciondelcuadro); cvShowImage("imagen de ejemplo",imagensuperimportanteparafps); cvWaitKey(10); }	freim--; //printf("la diferencia es de : %f \n",duraciondelcuadro); //printf("y los frames son: %d \n",freim); cvDestroyWindow("imagen de ejemplo"); return (freim/(3*duraciondelcuadro));

}//fin de la funcion

int main(int argc, char** argv) {// el nombre de la imagenes comienza en Dibujo1.jpg y van cambiando hasta el valor que tenga numim //cvWaitKey(-1); int c=0; //CvVideoWriter* creavideo; //creavideo = NULL; IplImage *image = 0; IplImage *imagen = 0; IplImage *temporal=0; IplImage *im_uno = 0; IplImage *im_dos = 0; IplImage *im_un = 0; IplImage *im_do = 0; IplImage *resta = 0; printf("buscando camaras... \n\n"); //cvWaitKey(-1); // CvVideoWriter* videoWriter = cvCreateVideoWriter("output_video.avi",	//	CV_FOURCC('D', 'I', 'V', 'X'), 29.97, cvSize(320, 240));// para seleccionar divx por defecto CvCapture* lacaptura; lacaptura = cvCaptureFromCAM( 0 ); printf("encontre algo voy a mirar si es bueno \n\n"); if( !lacaptura ) {		printf("no encuentro camara...\n"); cvWaitKey(-1); return -1; }

image= cvQueryFrame( lacaptura ); temporal = cvCreateImage( cvSize(image->width,(int)(image->height)/2), image->depth, image->nChannels ); imagen = cvCreateImage( cvSize(image->width,(int)(image->height)), image->depth, image->nChannels ); im_uno = cvCreateImage( cvSize(image->width,(int)(image->height)/2), image->depth, image->nChannels ); im_dos = cvCreateImage( cvSize(image->width,(int)(image->height)/2), image->depth, image->nChannels ); im_un = cvCreateImage( cvSize(image->width,(int)(image->height)/2), image->depth, image->nChannels ); im_do = cvCreateImage( cvSize(image->width,(int)(image->height)/2), image->depth, image->nChannels ); resta = cvCreateImage( cvSize(image->width,(int)(image->height)/2), image->depth, image->nChannels ); double cuadrosporsegundo = -1; cuadrosporsegundo = framespersec(lacaptura); printf( "la camara codifica a %f cuadros por segundo\n",cuadrosporsegundo);

//creavideo = cvCreateVideoWriter("videocreado.avi",CV_FOURCC('X','V','I','D'), 30.0, cvSize(image->width, image->height));//TODAS LAS IMAGENES DEBEN TENER EL MISMO TAMAÑO //creavideo = cvCreateVideoWriter("videocreado.avi",CV_FOURCC('X','V','I','D'), 30.0, cvSize(image->width, image->height));//TODAS LAS IMAGENES DEBEN TENER EL MISMO TAMAÑO

/*if(creavideo == NULL)//condición de error {		printf("No se pudo crear el video, revise el estado de la instalación del codec\n"); return(0); }*/

cvNamedWindow("Imagen", 1); cvNamedWindow("Imagen compuesta", 1); cvNamedWindow("resta", 1); cvNamedWindow("Imagen par actual", 1); cvNamedWindow("Imagen impar actual", 1); cvNamedWindow("Imagen par pasada", 1); cvNamedWindow("Imagen impar pasada", 1); //printf( "Codificando por favor espere...\n");

int banderap=0; while(1) {		image=cvQueryFrame( lacaptura );       //uso la cadena para importar el nombre int y1=0; int y2=0; int y3=0; //en un y do quedan las imagenes del cuadro anterior CV_SWAP(im_uno,im_un,temporal); CV_SWAP(im_dos,im_do,temporal); for( int y=0; yheight; y++ )//solo para ejemplo de como recorrer dos o mas imagenes al tiempo, para sacar negativo use cvNot {				uchar* tmp_apun = (uchar*) (image->imageData + y * image->widthStep); if(y % 2 == 0)//es par {					uchar* tmp_uno = (uchar*) (im_uno->imageData + y1 * im_uno->widthStep); for( int x=0; xwidth; x++ ) {						tmp_uno[im_uno->nChannels*x+0] = tmp_apun[image->nChannels*x+0]; tmp_uno[im_uno->nChannels*x+1] = tmp_apun[image->nChannels*x+1]; tmp_uno[im_uno->nChannels*x+2] = tmp_apun[image->nChannels*x+2]; }					y1++; }				else {					uchar* tmp_dos = (uchar*) (im_dos->imageData + y2 * im_dos->widthStep); for( int x=0; xwidth; x++ ) {						tmp_dos[im_dos->nChannels*x+0] = tmp_apun[image->nChannels*x+0]; tmp_dos[im_dos->nChannels*x+1] = tmp_apun[image->nChannels*x+1]; tmp_dos[im_dos->nChannels*x+2] = tmp_apun[image->nChannels*x+2]; }					y2++; }			}

for( int y=0; y < imagen->height; y += 2 )//un dos {					uchar* tmp_apun1 = (uchar*) (imagen->imageData + y      * imagen->widthStep); uchar* tmp_apun2 = (uchar*) (imagen->imageData + (y + 1) * imagen->widthStep); uchar* tmp_uno = (uchar*) (im_un->imageData + y3 * im_un->widthStep); uchar* tmp_dos = (uchar*) (im_dos->imageData + y3 * im_dos->widthStep); for( int x=0; xwidth; x++ ) {						tmp_apun1[3*x+0] = tmp_uno[3*x+0]; tmp_apun1[3*x+1] = tmp_uno[3*x+1]; tmp_apun1[3*x+2] = tmp_uno[3*x+2]; }

for( int x=0; xwidth; x++ ) {						tmp_apun2[3*x+0] = tmp_dos[3*x+0]; tmp_apun2[3*x+1] = tmp_dos[3*x+1]; tmp_apun2[3*x+2] = tmp_dos[3*x+2]; }					y3++; }

cvAbsDiff( im_un, im_dos, resta); cvShowImage("Imagen", image); cvShowImage("Imagen compuesta", imagen); cvShowImage("resta", resta); cvShowImage("Imagen par actual", im_uno); cvShowImage("Imagen impar actual", im_dos); cvShowImage("Imagen par pasada", im_un); cvShowImage("Imagen impar pasada", im_do); //cvWriteFrame(creavideo, image); c = cvWaitKey(1); if( (char)c == 115 ) {		cvSaveImage("Imagen.bmp", image); cvSaveImage("Imagen compuesta.bmp", imagen); cvSaveImage("resta.bmp", resta); cvSaveImage("Imagen par actual.bmp", im_uno); cvSaveImage("Imagen impar actual.bmp", im_dos); cvSaveImage("Imagen par pasada.bmp", im_un); cvSaveImage("Imagen impar pasada.bmp", im_do); }		if( (char)c == 27 ) break; }	//cvReleaseVideoWriter(&creavideo); //cvReleaseImage(&image); cvReleaseCapture(&lacaptura); cvDestroyWindow("Imagen"); printf( "Fin del video. Trabajo OK\n"); }

code