Как заставить приближение приближения () возвращать только 4 лучших угла? — Opencv 2.4.2

ну вопрос говорит сам за себя

У меня есть некоторый контур, и я хочу получить из него лучший четырехугольник

2

Решение

Вы должны найти подходящее значение для epsilon с помощью метода вложенных интервалов, так как количество точек увеличивается с уменьшением epsion, Вполне возможно, что значение 4 угловых точек не может быть достигнуто, поскольку число точек может увеличиться с 3 до 5 при определенном значении эпсилона.

Если вы хотите исключить этот случай, вам может потребоваться самостоятельно реализовать алгоритм Рамера-Дугласа-Пекера и изменить его, чтобы получить заданное количество баллов. (Кстати, вы просите «лучшие» 4 угла. Вы должны указать, что лучше всего означает. approxPolyDp() не претендует на оптимальное решение!)

Кроме этого, я не вижу способа заставить approxPolyDP() вернуть 4 балла.

3

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

У меня была проблема с картами с закругленными углами, где даже если я получил approxPolyDP() чтобы вернуть только 4 точки / края, это никогда не было лучшим, потому что «углы» часто выбирались так, чтобы быть ближе к этим закругленным краям. Мое решение заключалось в увеличении числа точек, возвращаемых за углы, а затем моя проблема позволила мне относительно безопасно предположить, что четыре самых длинных найденных ребра представляли стороны. Возьмите эти четыре самых длинных ребра по порядку и найдите, где каждая пара пересекается, и у вас есть точки четырехугольника.

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

3

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