GECKO 1.0
Human-computer interface based on hand gesture recognition
void HandDetector::filterFace ( const cv::Mat &  src,
cv::Mat &  dstMask 
) [private]

Removes the face from the src image.

--

{
    //-- Create variables to store faces
    std::vector< cv::Rect > detectedFaces;

    //-- Convert the source image to a greyscale image:
    cv::Mat srcGrey;
    cv::cvtColor( src, srcGrey, CV_BGR2GRAY );

    cv::Mat srcGreySmall;
    cv::resize( srcGrey, srcGreySmall, cv::Size(0, 0), 0.25, 0.25 );

    //-- Detect face:
    faceDetector.detectMultiScale( srcGreySmall, detectedFaces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, cv::Size( 30, 30) );

    dstMask = cv::Mat(  srcGrey.size() , CV_8UC1,  cv::Scalar( 255, 255, 255) );

    //-- Clear detected faces:
    lastFacesPos.clear();

    //-- Show detected faces:
    if ( ! detectedFaces.empty() )
    {
        for (int i = 0; i < detectedFaces.size(); i++)
        {
            cv::Rect resizedRect;

            if ( factorX == 1 && factorY == 1 )
            {
                //-- Do not resize:
                resizedRect = cv::Rect( detectedFaces[i].x * 4,
                                        detectedFaces[i].y * 4,
                                        detectedFaces[i].width  * 4,
                                        detectedFaces[i].height * 4 );
            }
            else
            {
                //-- Resize:
                //-- Calculate original center:
                double cx = detectedFaces[i].x * 4 + detectedFaces[i].width * 2;
                double cy = detectedFaces[i].y * 4 + detectedFaces[i].height * 2;

                //-- Calculate new size:
                double newW = detectedFaces[i].width * 4 * factorX;
                double newH = detectedFaces[i].width * 4 * factorY;

                //-- Calculate new center:
                double newX = cx - newW / 2;
                double newY = cy - newH / 2;

                resizedRect = cv::Rect( newX, newY, newW, newH );
            }

            cv::rectangle( dstMask, resizedRect, cv::Scalar( 0, 0, 0), CV_FILLED );

            //-- Save rectancle
            lastFacesPos.push_back( resizedRect );
        }
    }
}
 All Classes Functions Variables