Example #1
0
void aplicar_original     (const char *archivo_entrada,
                           bool verbose, bool frames,
                           const char *carpeta_frames){
    static size_t bufsize = 1024;
    char namebuff[bufsize + 1];

    const char *filename = basename(archivo_entrada);
    CvCapture *srcVid = abrir_video(archivo_entrada);
	CvSize dst_size;

    dst_size.width = cvGetCaptureProperty(srcVid,CV_CAP_PROP_FRAME_WIDTH);
    dst_size.height = cvGetCaptureProperty(srcVid,CV_CAP_PROP_FRAME_HEIGHT);
	double fps = cvGetCaptureProperty(srcVid,CV_CAP_PROP_FPS);

    typedef struct CvVideoWriter CvVideoWriter;
    snprintf(namebuff, bufsize, "%s.original.avi", archivo_entrada);
    printf("\n\n%s\n\n",namebuff);
    CvVideoWriter* dstVid = abrir_writer(namebuff, fps, dst_size);

    if (verbose) {
        cvNamedWindow("procesanding", CV_WINDOW_AUTOSIZE);
    }
    unsigned int framenum = 0;
    while(1) {
        /* Capturo un frame */
        IplImage *frame = cvQueryFrame(srcVid);

        framenum ++;


        if(framenum==100)break;

        cvWriteFrame(dstVid, frame);
        if (frames) {
            /* Escribo el frame */
            snprintf(namebuff, bufsize, "%s/%s.original.%d.bmp",
                                    carpeta_frames, filename, framenum);
            cvSaveImage(namebuff, frame, NULL);
        }
        if (verbose) {
            cvShowImage("procesanding", frame);
            cvWaitKey(1);
        }
    }

    if (verbose) {
        cvDestroyWindow("procesanding");
    }

    cvReleaseVideoWriter(&dstVid);
    cvReleaseCapture(&srcVid);
}
Example #2
0
void aplicar_filtro_color (const char *implementacion,
                           const char *archivo_entrada,
                           bool verbose, bool frames,
                           const char *carpeta_frames,
                           int rc, int gc, int bc,
                           int threshold) {
    static size_t bufsize = 1024;
    char namebuff[bufsize + 1];

    const char *filename = basename(archivo_entrada);
    CvCapture *srcVid = abrir_video(archivo_entrada);
	CvSize dst_size;

    dst_size.width = cvGetCaptureProperty(srcVid,CV_CAP_PROP_FRAME_WIDTH);
    dst_size.height = cvGetCaptureProperty(srcVid,CV_CAP_PROP_FRAME_HEIGHT);
	double fps = cvGetCaptureProperty(srcVid,CV_CAP_PROP_FPS);
    int nchannels = 3;

    typedef struct CvVideoWriter CvVideoWriter;
    CvVideoWriter* dstVid = NULL;

    if (!frames) {
        snprintf(namebuff, bufsize, "%s.fcolor.avi", archivo_entrada);
        dstVid = abrir_writer(namebuff, fps, dst_size);
    }
    /* Armo la imagen destino. */
	IplImage *dst = NULL;
    dst = cvCreateImage (dst_size, IPL_DEPTH_8U, nchannels);
    if (dst == NULL) {
        fprintf(stderr, "Error armando la imagen destino\n");
        exit(EXIT_FAILURE);
    }

    if (verbose) {
        cvNamedWindow("procesanding", CV_WINDOW_AUTOSIZE);
    }
    unsigned int framenum = 0;

    FILE* f = fopen(COLOR_TIEMPOS, "a");
    int iteraciones = 1;
    long int total = 0;

    while(1) {
        /* Capturo un frame */
        IplImage *frame = cvQueryFrame(srcVid);

        framenum ++;

        if (frame == NULL) {
            break;
        }

        /* Aplico el filtro */
        typedef void (fcolor_fn_t) (unsigned char*, unsigned char*,
                                    unsigned char, unsigned char,
                                    unsigned char, int, int, int);

        fcolor_fn_t *proceso;

        if (strcmp(implementacion, "c") == 0) {
            proceso = color_filter_c;
        } else {
            proceso = color_filter_asm;
        }

	int stop = 0;

	int start = 0;

	int tiempo = 0;

	MEDIR_TIEMPO_START(start);

        proceso((unsigned char *) frame->imageData,
                (unsigned char *)  dst->imageData, rc, gc, bc, threshold,
                frame->height, frame->width);

	MEDIR_TIEMPO_STOP(stop);

	tiempo = stop - start;

	total = tiempo + total;

	fprintf(f, "%d %d %ld\n", iteraciones, tiempo, total);

	iteraciones ++;

        if (frames) {
            /* Escribo el frame */
            snprintf(namebuff, bufsize, "%s/%s.fcolor.%d.bmp",
                                    carpeta_frames, filename, framenum);
            cvSaveImage(namebuff, dst, NULL);
        } else {
            cvWriteFrame(dstVid, dst);
        }
        if (verbose) {
            cvShowImage("procesanding", dst);
            cvWaitKey(1);
        }
    }
	FILE* g = fopen(COLOR_TOTALES, "a");
	fprintf(g,"%ld\n", total);
    fclose(g);
    
	promedio = promedio + (total / global);
    
    fclose(f);

    if (verbose) {
        cvDestroyWindow("procesanding");
    }

    cvReleaseImage(&dst);
    if (!frames) {
        cvReleaseVideoWriter(&dstVid);
    }
    cvReleaseCapture(&srcVid);
}
Example #3
0
void FileToVideo(const char *archivo_entrada, Video& video, const string carpeta_frames, const bool saveFrames, uint frame_drop)
{ 
    CvCapture *srcVid = abrir_video(archivo_entrada);

    CvSize dst_size;
    dst_size.width = cvGetCaptureProperty(srcVid,CV_CAP_PROP_FRAME_WIDTH);
    dst_size.height = cvGetCaptureProperty(srcVid,CV_CAP_PROP_FRAME_HEIGHT);
    double fps = cvGetCaptureProperty(srcVid,CV_CAP_PROP_FPS);

    video.frame_height = dst_size.height;

#ifdef COLOR_PROCESSING
    uint nchannels = 3;
    video.frame_width = dst_size.width * nchannels;
#else
    video.frame_width = dst_size.width;
#endif

    video.frame_rate = fps;
    uint frame_count = 0;
    while( true ) {
        
        IplImage *cvFrame = cvQueryFrame(srcVid);

        if (cvFrame == NULL) {
            break;
        }

        if(frame_count % (frame_drop+1) != 0){
            frame_count++;
            continue;
        }

        // cout << "Leyendo frame " << frame_count << endl;

        #ifdef COLOR_PROCESSING
            // Save frame bmp to carpeta_frames folder.
            if(saveFrames)
            {
                string str_frame = carpeta_frames;
                str_frame+= "/";
                str_frame+= "frame_";
                str_frame+= to_string(frame_count+1);
                str_frame+= ".bmp";
                cvSaveImage(str_frame.c_str(), cvFrame, NULL);
            }
        #else
            IplImage *cvBWFrame = cvCreateImage(cvGetSize(cvFrame), IPL_DEPTH_8U, 1);
            cvCvtColor(cvFrame, cvBWFrame, CV_BGR2GRAY);

            // Save frame bmp to carpeta_frames folder.
            if(saveFrames)
            {
                string str_frame = carpeta_frames;
                str_frame+= "/";
                str_frame+= "frame_";
                str_frame+= to_string(frame_count+1);
                str_frame+= ".bmp";
                cvSaveImage(str_frame.c_str(), cvBWFrame, NULL);
            }
        #endif

        // Load new frame
        #ifdef COLOR_PROCESSING
            unsigned char *src = (unsigned char *) cvFrame->imageData;
        #else
            unsigned char *src = (unsigned char *) cvBWFrame->imageData;
        #endif
        uint idx_src=0;

        // Reserve memory for <video.frame_height> pixel rows
        frame_t frame;
        frame.resize(video.frame_height);

        for (uint i = 0; i < video.frame_height; i++)
        {
            // Reserve memory for <video.frame_width> pixels per row
            frame[i].resize(video.frame_width);

            for (uint j = 0; j < video.frame_width; j++)
            {
                frame[i][j] = src[idx_src++];
            }
        }

        video.frames.push_back(frame);

        frame_count++;
    }

    video.frame_count = video.frames.size();

    cvReleaseCapture(&srcVid);
}