как вычислить внутренние углы формы шестиугольника в python openCV

Я обнаружил форму шестиугольника в Python, используя OpenCV. Я просто хочу вычислить его внутренний угол - форма определяется с помощью метода контура и приближения.

шестиугольник


person Usman Qureshi    schedule 23.09.2018    source источник


Ответы (2)


cv2.CHAIN_APPROX_SIMPLE, предложенный parthagar, действительно очень полезен, но он работает, удаляя все «ненужные» точки на прямых линиях. Если линии не совсем прямые, как на этой картинке, то это не сработает. Таким образом, хотя вы получите меньше очков, что хорошо, почти наверняка не будет ровно 6 очков, как вы хотите.

Чтобы получить приблизительное значение ровно 6 точек, вам нужно выполнить дополнительную работу. OpenCV предлагает cv2.approxPolyDP (Обучающие функции контура - 4. Приближение контура), который можно использовать для этого. Требуется найти правильное значение эпсилон, чтобы получить нужное количество очков, но это можно найти с помощью грубой силы:

#cnt = Your contour to be approximated
points_wanted = 6
precision = 10000
for x in range(precision):
    epsilon = (x/precision)*cv2.arcLength(cnt, True)
    approx = cv2.approxPolyDP(cnt, epsilon, True)
    if approx.shape[0] == points_wanted:
        break

Результат можно увидеть ниже. Обратите внимание, что он не будет полностью идеальным, это приближение, но, надеюсь, оно будет достаточно близким. Методы нахождения углов между двумя точками можно найти по ссылке parthagars. Удачи!

введите здесь описание изображения

person dennissv    schedule 23.09.2018

Вы должны были использовать findContours для поиска контура. Вы можете передать cv2.CHAIN_APPROX_SIMPLE в качестве третьего параметра в cv2.findContours(), что должно вернуть вам 6 точек вашего шестиугольника. Затем вы можете использовать эти 6 точек, чтобы найти углы между ними, используя функции numpy.

Обратитесь к это для нахождения углов.

person parthagar    schedule 23.09.2018