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
| #include <cv.h>
#include <highgui.h>
int main(void)
{
// On initialise la capture et on test si cela fonctionne
CvCapture* webcam = cvCreateCameraCapture(0);
if(!webcam) return 1;
if(!cvGrabFrame(webcam)) return 2;
// Déclaration de l'image de la webcam est de celle modifiée
IplImage* frame = cvRetrieveFrame(webcam);
IplImage* modif = cvCloneImage(frame);
// Déclaration d'une fenêtre pour l'image de la webcam, une autre pour l'image modifiée
cvNamedWindow("Hand tracking", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Test", CV_WINDOW_AUTOSIZE);
while(true)
{
// On récupère l'image de la webcam, on la retourne et on la copie dans l'image modifiée
if(!cvGrabFrame(webcam)) break;
cvFlip(cvRetrieveFrame(webcam), frame, 1);
modif = cvCloneImage(frame);
// Pour tous les pixels de l'image modifiée
for(int i = 0; i < modif -> width; i++) for(int j = 0; j < modif -> height; j++)
{
// On récupère le pixel
CvScalar pixel = cvGet2D(frame, j, i);
// Si il posède une quantité importante de rouge
if(pixel.val[2] > 200)
{
// On le remplace par un pixel blanc
CvScalar white;
white.val[0] = white.val[1] = white.val[2] = 255;
cvSet2D(modif, j, i, white);
}
}
// On affiche l'image de la webcam et l'image modifiée
cvShowImage("Hand tracking", frame);
cvShowImage("Test", modif);
// On attent 1ms et on quitte si on a appuyé sur <echap>
if(cvWaitKey(1) == 27) break;
}
// On libère les fenêtre, la capture et les images
cvDestroyAllWindows();
frame = NULL;
modif = NULL;
cvReleaseCapture(&webcam);
return 0;
} |
Partager