Минимальный ограничивающий прямоугольник контура возвращается OpenCv
как структура CvRect
. Я пытаюсь создать поле / границу толщиной м пикселя вокруг подизображения, которое соответствует этому CvRect
на исходном изображении, т.е. вместо точного ограничивающего прямоугольника компонента (контура) мы получить нечто большее, содержащее компонент, а также окружающие его пиксели.
Заботясь о границах изображения, я использую следующий код для увеличения размера CvRect
, который позже применяется с CvSetImageROI()
для получения подизображения:
//making m px border around subimg
CvRect box_swt = box1;
box_swt.x = (box1.x)>m ? box1.x-m : box1.x;
box_swt.y = (box1.y)>m ? box1.y-m : box1.y;
box_swt.width = (box1.x + box1.width) < img->width-m ? box1.width+m : box1.width;
box_swt.height = (box1.y + box1.height) < img->height-m ? box1.height+m : box1.height;
Здесь box1
хранит возврат от cvBoundingRect(ptr, 0)
, где ptr - указатель на обнаруженные контуры.
Проблема в том, что результирующее изображение увеличивается только в верхней и левой границах, остальные остаются неизменными. Я не получаю субизображение с равномерной рамкой толщиной в пиксель m со всех сторон. Это происходит для всех случаев, а не только для тех, кто на границе. Есть ли логическая ошибка?