Наложение другого изображения на область лица

Автор работы: Пользователь скрыл имя, 24 Февраля 2012 в 21:01, курсовая работа

Краткое описание

Библиотека компьютерного зрения OpenCV –это коллекция функций, написанных на языке C, реализующих многие популярные алгоритмы обработки изображений и алгоритмы компьютерного зрения. Для реализации любого алгоритма из области компьютерного зрения, требуются общие - низкоуровневые, базовые моменты. К таким элементам относится манипулирование изображениями, организация структур памяти, захват видеоизображения с камеры и загрузка изображения из файла.

Содержание работы

Техническое задание..……………………………………………………..2
Введение ……………………………………………………………..…….4
Детектирование лиц и глаз………………………………………........5
Подробное описание процесса детектирования в функции
detect_and_draw()………………………………………………........5
Реализация отслеживания лица…………………………………………………7
Наложение другого изображения на область лица …………………..9
Заключение……..…………………………………………………..…….10
Список использованных источников.………………………………….11
Приложение A Результат работы программы………………………..12
Приложение B Исходный код программы………...…………

Содержимое работы - 1 файл

Курсовой проект-исправленный_1.docx

— 446.17 Кб (Скачать файл)

                        if( c == 27 || c == 'q' || c == 'Q' )

                            break;

                    }

                }

                fclose(f);

            }

        }

    }

 

    cvDestroyWindow("result");

 

    return 0;

}

 

void detectAndDraw( Mat& img,

                   CascadeClassifier& cascade, CascadeClassifier& nestedCascade,

                   double scale)

{

    int i = 0;

    double t = 0;

    vector<Rect> faces;

    const static Scalar colors[] =  { CV_RGB(0,0,255),

        CV_RGB(0,128,255),

        CV_RGB(0,255,255),

        CV_RGB(0,255,0),

        CV_RGB(255,128,0),

        CV_RGB(255,255,0),

        CV_RGB(255,0,0),

        CV_RGB(255,0,255)} ;

    Mat gray, smallImg( cvRound (img.rows/scale), cvRound(img.cols/scale), CV_8UC1 );

 

    cvtColor( img, gray, CV_BGR2GRAY );

    resize( gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR );

    equalizeHist( smallImg, smallImg );

 

    t = (double)cvGetTickCount();

    cascade.detectMultiScale( smallImg, faces,

        1.1, 2, 0

        //|CV_HAAR_FIND_BIGGEST_OBJECT

        //|CV_HAAR_DO_ROUGH_SEARCH

        |CV_HAAR_SCALE_IMAGE

        ,

        Size(30, 30) );

    t = (double)cvGetTickCount() - t;

    printf( "detection time = %g ms\n", t/((double)cvGetTickFrequency()*1000.) );

    for( vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++, i++ )

    {

        Mat smallImgROI;

        vector<Rect> nestedObjects;

        Point center;

        Scalar color = colors[i%8];

        int radius;

        center.x = cvRound((r->x + r->width*0.5)*scale);

        center.y = cvRound((r->y + r->height*0.5)*scale);

        radius = cvRound((r->width + r->height)*0.25*scale);

        circle( img, center, radius, color, 3, 8, 0 );

        if( nestedCascade.empty() )

            continue;

        smallImgROI = smallImg(*r);

        nestedCascade.detectMultiScale( smallImgROI, nestedObjects,

            1.1, 2, 0

            //|CV_HAAR_FIND_BIGGEST_OBJECT

            //|CV_HAAR_DO_ROUGH_SEARCH

            //|CV_HAAR_DO_CANNY_PRUNING

            |CV_HAAR_SCALE_IMAGE

            ,

            Size(30, 30) );

        for( vector<Rect>::const_iterator nr = nestedObjects.begin(); nr != nestedObjects.end(); nr++ )

        {

            center.x = cvRound((r->x + nr->x + nr->width*0.5)*scale);

            center.y = cvRound((r->y + nr->y + nr->height*0.5)*scale);

            radius = cvRound((nr->width + nr->height)*0.25*scale);

            circle( img, center, radius, color, 3, 8, 0 );

        }

    } 

    cv::imshow( "result", img );   

}

 


Информация о работе Наложение другого изображения на область лица