Дифференциация трапеции от квадратов и прямоугольников - PullRequest
0 голосов
/ 23 февраля 2020

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

Я просто oop через контуры и пытаюсь различить guish трапецоид по другим признакам, так как я не совсем уверен, как я могу проверить, что линии на трапеции обратные. Любые идеи?

Вот пример того, что я отслеживаю: enter image description here

Это то, что я до сих пор придумал:

for cnt in contourList:
        hull = cv2.convexHull(cnt)
        x, y, w, h = cv2.boundingRect(cnt)
        area = h * w * 1.0
        originalArea = cv2.contourArea(hull)

        #skip if not minimum area
        if(originalArea < 200 ):
            continue #too small!

        kMinTargetWidth = 20
        kMaxTargetWidth = 300
        kMinTargetHeight = 6
        kMaxTargetHeight = 60
        if(w < kMinTargetWidth or w  > kMaxTargetWidth):
            continue
        if(h < kMinTargetHeight or h > kMaxTargetHeight):
            continue


        #Ratio of width to height
        #ratio should be 1 or greater
        #target is 43 cm tall, 100 cm wide
        ratio = float(w) / float(h)
        if(ratio < 1.3):
            continue #skip

        kMinFullness = .50
        kMaxFullness = .95
        fullness = originalArea / area
        if(fullness < kMinFullness or fullness > kMaxFullness):
            continue

        if(cv2.isContourConvex(cnt) == True):
            continue

Я надеялся, что вогнутая природа этих трапециевидных объектов будет отличаться от прямоугольников / квадратов. Теперь я думаю, что мне следует как-то проверить боковой угол.

Или взять выпуклый корпус и найти угловые точки. Но я чувствую, что в OpenCV уже есть что-то подобное? По сути, я спрашиваю, чего мне не хватает!

1 Ответ

0 голосов
/ 23 февраля 2020

Если вы определите contourList и cv2 и определите пакеты, которые вы импортируете, мои предложения могут быть более направленными.

Просто работая с трапецией, я бы предложил использовать функцию трапеции: один набор противоположных линий параллелен, а другой - нет. Это требует знания склонов четырех линий. Если вы не знаете эти склоны напрямую, но вы знаете вершины, то вы можете рассчитать четыре склона.

По сути, использование определения трапеции является надежным, и существует несколько способов определения параллельности. и непараллельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...