Определить "тангенциальный четырехугольник" из 4-х точек в OpenCv

Что я пытаюсь сделать, это получить тангенциальный четырехугольник из 4 точек, используя OpenCv,

Я попробовал подход, где я просто беру центр четырех точек и добавляю круг. Но это не всегда так. Далее очень сложно определить радиус круга.

Коротко: Тангенциальный четырехугольник - это круг, который полностью лежит внутри квадрата. например:

Источник: https://commons.wikimedia.org/wiki/File:Tangentenviereck.svg CC BY-SA 4.0

Есть ли способ в OpenCv для этого?

1 ответ

Если у вас 4 точки A,B, C, D, у вас уже есть четырехугольник (четырехсторонний многоугольник).

Не гарантируется, что это тангенциальное является тангенциальным - это верно, только если суммы противоположных длин сторон равны.

Если у вас действительно есть вершины тангенциального тангенциального - найдите длину сторон a,b,c,d и диагоналей p,q и получите радиус окружности как

r = Sqrt(4*p^2*q^2-(a^2-b^2+c^2-d^2)^2)) / (2*(a+b+c+d))

На вики-странице есть много формул для центра вогнутости, но я бы использовал тригонометрический подход - получить вектор биссектрисы угла A как сумму нормализованных векторов AB и AD, нормализовать его, умножить на длину |AM|=r/tg(A/2) и добавить полученный вектор к A.

Обратите внимание, что OpenCV - это библиотека для обработки изображений, а не для геометрических вычислений.

Другие вопросы по тегам