Как рассчитать внутренние углы шестиугольной формы в Python OpenCV
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. Удачи!
Вы должны были использовать findContours для нахождения контура. Вы могли бы пройти cv2.CHAIN_APPROX_SIMPLE
в качестве третьего параметра cv2.findContours()
который должен вернуть вам 6 очков вашего шестиугольника. Затем вы можете использовать эти 6 точек, чтобы найти углы между ними, используя функции NumPy.
Обратитесь к этому для нахождения углов.