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

#c #opencv #image-processing #contour #edge-detection

#c #opencv #обработка изображений #контур #обнаружение границ

Вопрос:

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

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

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

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

Ответ №1:

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

Смотрите Пример здесь о том, как использовать approxPolyDP.

Ответ №2:

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

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

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

    cv::Mat draw = cv::Mat::нули ( 500,500, CV_8UC3);

    int contour_id = 1;

    for(int i = 0; i< контур[contour_id].size(); i ) { cout << контур[contour_id][i] << endl; cv::circle(рисовать,контур[contour_id][i],1,cv::Скалярный(0,0,255)); }

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

С уважением