Для школьного проекта я пытаюсь распознать форму шестиугольника в видеозахвате с использованием python и opencv. Проблема в том, что когда я использую этот код, он никогда не находит шестиугольник. Я не нашел причины, почему он не работает, поэтому я надеюсь, что кто-то может мне помочь.python opencv shape detection
Код:
import numpy as np
import cv2
stop_cascade = cv2.CascadeClassifier('cascade.xml')
cap = cv2.VideoCapture(0)
while(True):
ret, img = cap.read()
lower = np.array([0,0,0])
upper = np.array([20,20,20])
mask = cv2.inRange(img, lower, upper)
contours, h = cv2.findContours(mask, 1, 2)
contours.sort(key = len)
for contour in contours[-3:]:
approx = cv2.approxPolyDP(contour,0.1*cv2.arcLength(contour,True),True)
if len(approx) == 6:
print "hexagon"
cv2.imshow('image', mask)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Заранее спасибо
Edit: Чтобы быть немного более конкретными. Я пробовал размывать разные шестиугольники, но когда я печатаю len (approx), он никогда не выше 4. Является ли это ошибкой в моем объекте или это то, что у меня есть ошибка в поиске контуров, о которых я не знаю?
Что вы на самом деле отлаживали вашу программу, вместо того, чтобы сказать «Я не нашел причины, почему она не работает, поэтому я надеюсь, что кто-то может мне помочь?» Пожалуйста, укажите * конкретный * вопрос, а не «пожалуйста, отлаживайте это ...» – blacksite
Прошу прощения за то, что вы недостаточно конкретно. То, что я сделал для отладки кода, содержит разные формы шестиугольника перед камерой, в то время как программа печатала len (приблизительно), но никогда не показывала число выше, чем 4. Я эта проблема из-за моих объектов (гексон образное изображение на бумаге), или это я виноват в поиске контуров? – Nerdeose
Можете ли вы приложить образец ввода? – ZdaR