Salve a tutti.
Stavo dando un'occhiata alla libreria OpenCV e stavo provando il motion detection tramite la modalità cvGaussianBGModel. Per ora mi sono limitato a fare un collage da due tutorial per capirne meglio il funzionamento e fare delle prove.
Visto che OpenCV non riesce a riconoscere la mia webcam l'ho prima inizializzata con la libreria InputVideo (che si appoggia su DirectX) o poi estratto un frame che ho poi fornito al Gaussian Model che dovrebbe oltre a calcolare la differenze dovrebbe ridare il background con
cvShowImage("BG", bgModel->background);
ma io nella finestra BG non vedo nulla, vedo solo grigio... non capisco perchè!!! Questo è il mio codice:

codice:
#include "stdafx.h"

#include <videoInput.h>

#include <iostream>

#include <cv.h>
#include <cxcore.h>
#include <cvaux.h>
#include <highgui.h>

int _tmain(int argc, _TCHAR* argv[])
{
	
    videoInput VI;
    int numDevices = VI.listDevices();
    int device1 = 0;
    VI.setupDevice(device1);
    int width = VI.getWidth(device1);
    int height = VI.getHeight(device1);
	
    IplImage* image = cvCreateImage(cvSize(width, height), 8, 3);

    unsigned char* yourBuffer = new unsigned char[VI.getSize(device1)];

    cout << "Tacking the background" << endl;
    for(int firstFrame = 0; firstFrame <= 5; firstFrame++){
        
        /* Capture 1 video frame for initialization */
        VI.getPixels(device1, yourBuffer, false, false);
        image->imageData = (char*)yourBuffer;
        cvConvertImage(image, image, CV_CVTIMG_FLIP); //src, dst, flag
    }
    cvSaveImage("Background.jpg", image);

    /* Create windows */
    cvNamedWindow("Camera", 1);    //Camera Live
    cvNamedWindow("BG", 1);           //Background
    cvNamedWindow("Back", 1);        //Background
    cvNamedWindow("FG", 1);           //Foreground - Differential Mask

    /* Select parameters for Gaussian model. */
    CvGaussBGStatModelParams* params = new CvGaussBGStatModelParams;
    params->win_size=2;
    params->n_gauss=5;
    params->bg_threshold=0.7;
    params->std_threshold=3.5;
    params->minArea=15;
    params->weight_init=0.05;
    params->variance_init=30;
    
    
    CvBGStatModel* bgModel = cvCreateGaussianBGModel(image, params);
    
    while(1)
    {
        /* Grab a fram */
        VI.getPixels(device1, yourBuffer, false, false);
        image->imageData = (char*)yourBuffer;
        cvConvertImage(image, image, CV_CVTIMG_FLIP); //src, dst, flag
		
        /* Update model */
        cvUpdateBGStatModel(image, bgModel);
        
        /* Display results */
        cvShowImage("Camera", image);
        cvShowImage("BG", bgModel->background);
        cvShowImage("FG", bgModel->foreground);
        
        /* If "ESC" pressed exit */
        if(cvWaitKey(15)==27) break;
    }
    
    /* Release Resources */
    VI.stopDevice(device1);
    cvDestroyWindow("BG");
    cvDestroyWindow("FG");
    cvDestroyWindow("Camera");
    cvReleaseBGStatModel( &bgModel );
    cvReleaseImage(&image);
    
    return 0;
}