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