OpenCV: установить ROI с углом? - PullRequest
1 голос
/ 31 января 2012

Я бы хотел использовать ROI для копирования найденного многоугольника на изображении в новое изображение. Я хотел бы, чтобы этот многоугольник вписывался точно в новый образ. До сих пор я использовал ROI, но заметил, что угол не учитывается, что дает мне плохой результат, как только я поворачиваю объект, который хочу обнаружить. Мне нужен один этот объект для дальнейшего анализа ...

Вот что я делаю:

while(/****/)
{
    CvSeq* approximatedContour = cvApproxPoly(currentContour,
                                              sizeof(CvContour),
                                              0,
                                              CV_POLY_APPROX_DP,
                                              8);

    etiquetteBox = cvMinAreaRect2(approximatedContour);
    CvSize2D32f sizeEtiquette = etiquetteBox.size;

    if(/****/)
    {
        CvPoint2D32f boxPoints[4];
        cvBoxPoints(etiquetteBox, boxPoints);

        cvSetImageROI(thresImg,cvRect((int)boxPoints[1].x, (int)boxPoints[1].y,
                      (int)sizeEtiquette.width,(int)sizeEtiquette.height));

        cvResize(thresImg,thresImgResized);

        /*****/
    }

Кто-нибудь знает, как интегрировать угол в ROI? Можно ли сделать иначе?

Спасибо!

1 Ответ

3 голосов
/ 31 января 2012

Вы должны сделать маску из RotatedRect и скопировать изображение с маской.

EDIT

Как сделать маску:

Создайте новое изображение того же размера, что и оригинал, но только с одним каналом 8U. Установите его на ноль с вашим предпочтительным методом. Нарисуйте свой прямоугольник, многоугольник, круг или все, что вы хотите использовать в качестве ROI, с вашей предпочтительной функцией рисования. DrawPoly, к примеру. Убедитесь, что вы заполните цифру 255. Покажите изображение. Он должен содержать белый многоугольник на черном фоне.

Использовать его как параметр маски.

...