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 :
codice:
#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!