Равноудаленная выборка по контуру opencv

#python #numpy #opencv #sampling

Вопрос:

Я пытаюсь получить равноудаленный образец из контура OpenCV, чтобы вычислить дескриптор Фурье этой формы.

В настоящее время я правильно извлек контуры , используя cv.findContours() , но в результирующем numpy массиве есть точки с переменными расстояниями между ними. Что я пытаюсь сделать, так это сгенерировать образец по этому контуру, который имеет равное расстояние между всеми точками.

То, что я попробовал сейчас, — это отслеживать исходный контур и рисовать точки на правильном расстоянии в направлении ближайшей следующей точки исходного контура.

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

Есть ли какой-то другой способ сделать это? Я чувствую, что должно быть что-то подобное numpy.linspace , что работает для целых фигур, а не только для 2 точек, но я не смог найти что-то похожее.

Надеюсь, все понятно, заранее спасибо!

Комментарии:

1. вы можете использовать параметр findContour для извлечения каждого пикселя контура без подвыборки. Оттуда вы можете перемещаться по контуру и подсчитывать расстояние от пикселя до пикселя по контуру, чтобы получить общую окружность контура и разделить ее на нужное количество точек, а затем во втором запуске выбрать такие точки (снова измеряя расстояние по контуру, пиксель за пикселем.

2. @Micka Не является ли сумма «расстояний от пикселя до пикселя» именно тем, что arcLength возвращает?

3. @HansHirse, вероятно, вы правы, это, скорее всего, облегчит задачу!