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