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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
int main() {
// Charger le fichier
CvCapture* capture = cvCaptureFromFile("F:\wmv.wmv");
// Verifier si le fichier est bien charge
if( !capture ) {
fprintf( stderr, "ERROR: capture is NULL \n" );
getchar();
return -1;
}
// Create a window in which the captured images will be presented
// Creer une fenetre
cvNamedWindow( "mywindow", CV_WINDOW_AUTOSIZE );
IplImage* frame0 = cvQueryFrame(capture);
int i=0;
// Show the image captured from the file in the window and repeat
while( 1 ) {
// Get one frame
IplImage* frame = cvQueryFrame( capture );
i=i++;
// If there is still an other frame after this frame, show it
if( !frame ) {
fprintf( stderr, "ERROR: frame is null...\n" );
getchar();
break;
}
float largeur = frame->width;
float hauteur = frame->height;
float a; float seuil=3; float coefficient=0.000025; float b=0;
CvScalar scalaire;
CvScalar scalaire0;
for(float x=0; x<frame->width; x++)
{
for(float y=0; y<frame->height; y++)
{
// On récupère le pixel (x,y) de l'image.
scalaire=cvGet2D(frame, y, x);
scalaire0=cvGet2D(frame0, y, x);
//différence entre les valeurs des pixels
a = scalaire.val[0] - scalaire0.val[0];
/* cout << a << endl; */
if (abs(a) > seuil)
{
//compter le nombre de pixel
//dont la différence des valeurs excède le seuil
b=b++;
}
}
}
// Si le nombre de pixels excède le nombre total
// de pixels dans le frame multiplié par un facteur 'coefficient'
if (b > (largeur * hauteur * coefficient))
{
cout << ("Changement de scene a ", i, "eme frame") << endl;
}
cvShowImage( "mywindow", frame );
cvWaitKey(10);
// Do not release the frame!
frame0=frame;
//frame0 prend les valeurs de frame actuel
//et sera utilisé dans le boucle suivant
//If ESC key pressed, Key=0x10001B under OpenCV 0.9.7(linux version),
//remove higher bits using AND operator
if( (cvWaitKey(10) & 255) == 27 ) break;
}
// Release the capture device housekeeping
cvReleaseCapture( &capture );
cvDestroyWindow( "mywindow" );
return 0;
} |
Partager