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

Rispondi quotando