Изменения значений CvRect не отражаются на изображении - PullRequest
0 голосов
/ 27 сентября 2011

Минимальный ограничивающий прямоугольник контура возвращается 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 со всех сторон. Это происходит для всех случаев, а не только для тех, кто на границе. Есть ли логическая ошибка?

1 Ответ

0 голосов
/ 27 сентября 2011

Когда вы изменяете x и y прямоугольника, вы не увеличиваете его размер, просто перемещаете его, а затем увеличиваете ширину и высоту всего на m.Я думаю, что вы хотите увеличить его на 2 м, чтобы получить желаемый эффект.

...