Ограничить изображение Mat в OpenCV

я представляю в OpenCV. Я пытаюсь распознать несколько частей лица (глаза и рот). Мое программное обеспечение правильно распознает лицо и глаза, но у меня есть некоторые проблемы со ртом. Он показывает мне несколько ртов в верхнем месте от лица, я понял, что в нижнем месте от лица он показывает рот, и мне нужно ограничить изображение от лица, чтобы взять только рот.

У меня есть следующий код:

Mat faceRoi = frame_gray(faces[i]);

    vector<Rect> eyes;
    eyes_cascade.detectMultiScale(faceRoi, eyes);

    cout << "NUMERO EYES: " << eyes.size() << endl;

    for(unsigned int j=0; j<eyes.size(); j++)
    {
        Point center( faces[i].x + eyes[j].x + eyes[j].width * 0.5, faces[i].y + eyes[j].y + eyes[j].height * 0.5);
        int radius = cvRound( (eyes[j].width + eyes[j].height) * 0.3 );
        circle(frame, center, radius, Scalar( 255, 0, 0 ), 3, 8, 0 );       
    }

    cout << " FACE-ROI ---->    ROWS: " << faceRoi.rows << "  COLS: " << faceRoi.cols << endl;

    vector<Rect> smiles;

    smile_cascade.detectMultiScale(smileRoi, smiles);
    cout << "NUMERO SMILES: " << smiles.size() << endl; 
    for(unsigned int k=0; k<smiles.size(); k++)
    {
        Point center(faces[i].x + smiles[k].x + smiles[k].width * 0.5, faces[i].y + smiles[k].y + smiles[k].height * 0.5);
        ellipse(frame, center, Size(smiles[k].width * 0.5, smiles[k].height * 0.5), 0, 0, 360, Scalar(0,255,255), 3, 8, 0);
    }    

Мой вопрос следующий... как именно я могу скопировать изображение из другого с новыми ограничениями (диапазон, мне нужна только середина или 2/3 часть этого изображения, место изо рта).

Надеюсь, кто-нибудь может мне помочь! Благодарю вас!


person Jaime Menendez Llana    schedule 22.09.2015    source источник


Ответы (1)


вы можете определить smallRoi как следующий код (ссылка: smiledetect.cpp)

vector<Rect> smiles;

// insert this lines to your code    
Rect r = faces[i];
const int half_height=cvRound((float)r.height/2);
r.y=r.y + half_height;
r.height = half_height-1;
smileRoi = frame_gray( r );

smile_cascade.detectMultiScale(smileRoi, smiles);
person sturkmen    schedule 22.09.2015