GECKO 1.0
Human-computer interface based on hand gesture recognition
void HandDetector::calibrationLoop ( cv::VideoCapture  cap)

Allows the user to adjust the HSV range manually to improve the segmentation.

{
    int delay=24;

    int h[2]={lower_limit[0],upper_limit[0]};
    int s[2]={lower_limit[1],upper_limit[1]};
    int v[2]={lower_limit[2],upper_limit[2]};

    while (1)
    {
        //-- Get current frame
        cv::Mat frame=cv::imread("../img/calibration_loop.png");

        cv::imshow("PRESS ENTER", frame);
        //-- Wait for user confirmation
        char key =  cv::waitKey(delay);
        if ( key == 10 || key == 13 )
        {
            cv::destroyWindow("PRESS ENTER");
            break;
        }
        else if (key==27 || key=='q')
            exit(0);
    }

    //-- Create the calibration window with the trackbars
    cv::namedWindow("Calibrating skin");
    cv::createTrackbar("H min", "Calibrating skin", &h[0], 255);
    cv::createTrackbar("H max", "Calibrating skin", &h[1], 255);

    cv::createTrackbar("S min", "Calibrating skin", &s[0], 255);
    cv::createTrackbar("S max", "Calibrating skin", &s[1], 255);

    cv::createTrackbar("V min", "Calibrating skin", &v[0], 255);
    cv::createTrackbar("V max", "Calibrating skin", &v[1], 255);

    while (1)
    {
        //-- Get current frame
        cv::Mat frame, dst;
        if (! cap.read( frame ) )
            break;
        cv::flip(frame,frame,1);

        //change the skin thresholding limits using the trackbars
        lower_limit=cv::Scalar(cv::getTrackbarPos("H min", "Calibrating skin"), cv::getTrackbarPos("S min", "Calibrating skin"), cv::getTrackbarPos("V min", "Calibrating skin"));
        upper_limit=cv::Scalar(cv::getTrackbarPos("H max", "Calibrating skin"), cv::getTrackbarPos("S max", "Calibrating skin"), cv::getTrackbarPos("V max", "Calibrating skin"));
        HandDetector::filter_hand(frame, dst);

        cv::imshow("Calibrating skin", dst);
        //-- Wait for user confirmation
        char key =  cv::waitKey(delay);
        if ( key == 10 || key == 13 )
        {
            cv::destroyWindow("Calibrating skin");
            break;
        }
        else if (key==27 || key=='q')
            exit(0);

    }

}

Here is the call graph for this function:

 All Classes Functions Variables