1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
#include <iostream>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <cmath>
using namespace std;
void calcul(IplImage* ImTemp1, IplImage* ImTemp2,double somme);
int main()
{
CvCapture* input_video=NULL;
input_video = cvCaptureFromFile("video.avi");
int FrameNumber = static_cast<int> (cvGetCaptureProperty (input_video, CV_CAP_PROP_FRAME_COUNT));
printf("%d\n",FrameNumber);
IplImage* ImTemp1=NULL;
IplImage* ImTemp2=NULL;
cvSetCaptureProperty(input_video, CV_CAP_PROP_POS_FRAMES,0);
ImTemp1=cvCloneImage(cvQueryFrame(input_video));
for (int i=0;i<FrameNumber-1;i++)
{
cvSetCaptureProperty(input_video, CV_CAP_PROP_POS_FRAMES,i+1);
ImTemp2=cvCloneImage(cvQueryFrame(input_video));
double somme=0;
calcul(ImTemp1,ImTemp2,somme);
cvReleaseImage(&ImTemp1);
ImTemp1=cvCloneImage(ImTemp2);
cvNamedWindow("F1",1);
cvShowImage("F1",ImTemp1);
cvWaitKey(1);
cvReleaseImage(&ImTemp2);
}
cvReleaseCapture(&input_video);
cvReleaseImage(&ImTemp1);
return 0;
}
void calcul(IplImage* ImTemp1, IplImage* ImTemp2,double somme)
{
double res=(double)ImTemp1->width*(double)ImTemp1->height;
CvScalar scalaire1;
CvScalar scalaire2;
for (int x=0; x<ImTemp1->width; x++)
{
for (int y=0; y<ImTemp1->height; y++)
{
scalaire1=cvGet2D(ImTemp1,y,x);
scalaire2=cvGet2D(ImTemp2,y,x);
somme = somme + std::abs((double)scalaire1.val[0]- (double)scalaire2.val[0])/res;
}
}
} |
Partager