Отметьте точки на контурной линии с помощью OpenCV

Я хочу сделать множество точек на одинаковом расстоянии на линии края листа растения (как показано на рисунке ниже). Я хочу сделать маленький квадрат красного цвета на линии края листа. Я сохраняю набор точек линии края листа как контур.

введите описание изображения здесь

Есть ли способ сделать это с помощью OpenCV / C ++? (особенно я хочу, чтобы сохранить эти точки для дальнейшего использования приложения)

Заранее спасибо.

1

Решение

Вам нужно рассчитать approxPolyDP для контура, который вы уже нашли, аппроксимация округляет полигональные кривые с заданной точностью, где вы можете настроить параметр эпсилон чтобы получить желаемый результат.

Увидеть пример здесь о том, как использовать прибл.

2

Другие решения

  1. FindContours, чтобы извлечь контуры вашего изображения. (Преобразуйте ваше изображение в оттенки серого, примените двоичный порог и ранее обнаруживайте четкие края, для лучших результатов.)

    вектор> контуры;
    cv :: findContours (src_img, контуры, иерархия, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

  2. Нарисуйте все точки контура. Пример кода:

    cv :: Mat draw = cv :: Mat :: zeros (500 500, CV_8UC3);

    int contour_id = 1;

    для (int i = 0; i< Контур [contour_id] .size (); я ++)
    {
    соиЬ << Контур [contour_id] [I] << епсИ;
    резюме :: круг (рисовать, контур [contour_id] [I], 1, резюме :: Скалярных (0,0,255));
    }

Кроме того, вы также можете использовать ApproxPolyDP или PointPolygonTest Opencv функционирует для всех точек на контуре. Смотрите полную информацию и пример кода Вот. Как вы можете прочитать по ссылке, эта функция возвращает расстояние, которое является отрицательным, когда точка находится вне контура, положительным, когда точка находится внутри, и нулевым, если точка находится на контуре.
Таким образом, вы должны рисовать только точки, которые возвращают ноль.

С уважением

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector