Как объединить 2 CvRects с минимальным расстоянием, которые являются результатом cvContour

в моем проекте я использую cvFindContours для обнаружения объектов. С результатом (-ами) я хочу пометить roi входного изображения (если расстояние между обнаруженными каплями велико, я хочу повторить маркировку roi).

Моя проблема в том, что несколько прямоугольников из найденных BLOB-объектов перекрываются или являются частью большего BLOB-объекта. Есть ли быстрое решение для удаления внутренних BLOB-объектов и объединения BLOB-объектов с минимальным расстоянием?

Например:


person 501 - not implemented    schedule 17.10.2012    source источник
comment
добавление примера изображения приветствуется.   -  person Abid Rahman K    schedule 18.10.2012


Ответы (1)


Вы можете проверить, перекрываются ли прямоугольники, используя operator& команды cv:: Прямой:

cv::Rect a(x1,y1,w1,h1);
cv::Rect b(x2,y2,w2,h2);
cv::Rect intersect = a&b; // if intersect is not empty, the rect overlaps

Что касается вашего «минимального расстояния», это невозможно сделать с помощью стандартных функций opencv. Вы должны определить, каково «расстояние» между прямоугольниками: расстояние между их центрами (не рекомендуется)? Расстояние между их границами? Тогда напомните, что у вас есть 2 измерения. Вы можете это сделать, но вы должны кодировать это самостоятельно.

person remi    schedule 18.10.2012
comment
привет, я реализовал это в JavaCV. Спасибо - person 501 - not implemented; 25.10.2012