Я хочу сделать множество точек на одинаковом расстоянии на линии края листа растения (как показано на рисунке ниже). Я хочу сделать маленький квадрат красного цвета на линии края листа. Я сохраняю набор точек линии края листа как контур.
Есть ли способ сделать это с помощью OpenCV / C ++? (особенно я хочу, чтобы сохранить эти точки для дальнейшего использования приложения)
Заранее спасибо.
Вам нужно рассчитать approxPolyDP для контура, который вы уже нашли, аппроксимация округляет полигональные кривые с заданной точностью, где вы можете настроить параметр эпсилон чтобы получить желаемый результат.
Увидеть пример здесь о том, как использовать прибл.
FindContours, чтобы извлечь контуры вашего изображения. (Преобразуйте ваше изображение в оттенки серого, примените двоичный порог и ранее обнаруживайте четкие края, для лучших результатов.)
вектор> контуры;
cv :: findContours (src_img, контуры, иерархия, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);
Нарисуйте все точки контура. Пример кода:
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 функционирует для всех точек на контуре. Смотрите полную информацию и пример кода Вот. Как вы можете прочитать по ссылке, эта функция возвращает расстояние, которое является отрицательным, когда точка находится вне контура, положительным, когда точка находится внутри, и нулевым, если точка находится на контуре.
Таким образом, вы должны рисовать только точки, которые возвращают ноль.
С уважением