PDA

Visualizza la versione completa : [C] Progetto Opencv


bitsurfer9
01-11-2013, 18:14
Salve ragazzi , avrei bisogno di aiuto riguardo ad un problema con un programmav che utilizza le librerie opencv:

il progetto deve prendere in input una sequenza di immagini dalla webcam , e confrontarle per rilevare se c' differenza di pixel e quindi movimento , se viene rilevato movimento deve scattare una foto.

il codice del progetto questo :


#include <opencv\cv.h>
#include <stdio.h>
#include <opencv\highgui.h>
#include "opencv2\core\core_c.h"
#include <stdlib.h>

int main() {

IplImage *frame, *frametime1, *frametime2, *frameForeground;
CvCapture* capture;
int key=0;

//catturo l'immagine
capture = cvCaptureFromCAM(0);

//inizializzo l'immagine frameris
CvSize isize=cvSize(640,480);
frameForeground=cvCreateImage(isize,8,1);

while(key!='q')
{
frame = cvQueryFrame( capture );
cvShowImage("video", frame );
key=cvWaitKey(10);
cvSaveImage("foto1.jpg",frame,0);

frame = cvQueryFrame( capture );
cvSaveImage("foto2.jpg",frame,0);


//faccio la differenza
frametime1=cvLoadImage("foto1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
frametime2=cvLoadImage("foto2.jpg", CV_LOAD_IMAGE_GRAYSCALE);
cvAbsDiff(frametime1, frametime2, frameForeground);
cvThreshold(frameForeground, frameForeground, 15, 255, CV_THRESH_BINARY);

cvShowImage("ris",frameForeground);


//conto i pixel bianchi
int a=0;
int i, j;
for(i=0;i<480;i++)
{
for(j=0;j<640;j++)
{
CvScalar pixel=cvGet2D(frameForeground,i,j);
a=a+pixel.val[0];

}
}


//se c' stato movimento scatto una foto
if(a>2000000)
{
cvSaveImage("Ladro.jpg",frame,0);
}

cvReleaseImage(&frametime1);
cvReleaseImage(&frametime2);


}

//libero la memoria
cvReleaseCapture( &capture );
cvDestroyWindow("video");
return 0;
}

questo codice lo ha eseguito correttamente una sola volta , se lo eseguo adesso crasha dandomi il seguente errore:

terminate called after throwing an instance of 'cv::Exception'
what(): C:\openCVinstaller\opencv\modules\core\src\arithm. cpp:2841: error: (-215) src1.size == dst.size && src1.type() == dst.type() in function cvAbsDiff

qualcuno pu aiutarmi e farmi capire dove sbaglio? grazie!

Loading