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:
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;
}