Как увеличить размер прямоугольника ROI до 100x100, если он меньше? - PullRequest
0 голосов
/ 13 июня 2019

Я обнаруживаю объекты, и иногда область ROI меньше, чем 100x100, и я хочу использовать минимальную область ROI 100x100, даже если объект меньше. Я не хочу изменять размер в результате cv::Mat, потому что, если рентабельность инвестиций небольшая, то это выглядит плохо. Это нормально, если рентабельность инвестиций превышает 100x100

Как я могу увеличить область ROI до 100x100 без исключения (в пределах изображения)?

1 Ответ

0 голосов
/ 14 июня 2019

Сделайте границу некоторого размера, чтобы матрица выходного размера имела желаемый размер.

/*
enum BorderTypes {
    BORDER_CONSTANT    = 0, //!< `iiiiii|abcdefgh|iiiiiii`  with some specified `i`
    BORDER_REPLICATE   = 1, //!< `aaaaaa|abcdefgh|hhhhhhh`
    BORDER_REFLECT     = 2, //!< `fedcba|abcdefgh|hgfedcb`
    BORDER_WRAP        = 3, //!< `cdefgh|abcdefgh|abcdefg`
    BORDER_REFLECT_101 = 4, //!< `gfedcb|abcdefgh|gfedcba`
    BORDER_TRANSPARENT = 5, //!< `uvwxyz|abcdefgh|ijklmno`

    BORDER_REFLECT101  = BORDER_REFLECT_101, //!< same as BORDER_REFLECT_101
    BORDER_DEFAULT     = BORDER_REFLECT_101, //!< same as BORDER_REFLECT_101
    BORDER_ISOLATED    = 16 //!< do not look outside of ROI
};

*/

cv::Mat out;

int top_border = ...
int bottom_border = ...
int left_border = ...
int right_border = ...

// Not sure that BORDER_TRANSPARENT is the best choice for
// your particular case. Check the other above (BORDER_CONSTANT may be better).
cv::copyMakeBorder(img, out, top_border, bottom_border,
                   left_border, right_border, cv::BORDER_TRANSPARENT);
...