Что я могу сделать в OpenCV, чтобы лучше идентифицировать круги? - PullRequest
0 голосов
/ 11 марта 2019

Итак, вот моя проблема, мне нужно иметь возможность определять и подсчитывать формы для проекта, и у меня возникла одна небольшая трудность.Я только начал возиться с OpenCV и не смог найти лучшего способа определения кругов без использования команды else.Например, если в кадре есть что-то еще, не являющееся явно одной из других фигур, он обнаружит его в виде круга (и в идеале я хотел бы иметь возможность игнорировать эти объекты в кадре.) Я не уверенесли это влияет на что-либо, кроме этой части кода, я использую адаптивное пороговое значение и размытие по Гауссу, чтобы улучшить обработку.

TLDR: я пытаюсь найти способ идентифицировать круги без использования оператора else,

def detect(self, c):
    # initialize the shape name and approximate the contour
    shape = "unidentified"
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.04 * peri, True)

    # if the shape is a triangle, it will have 3 vertices
    if len(approx) == 3:
        shape = "triangle"
        self.s2 = self.s2 + 1

    # if the shape has 4 vertices, it is either a square or
    # a rectangle
    elif len(approx) == 4:
        # compute the bounding box of the contour and use the
        # bounding box to compute the aspect ratio
        (x, y, w, h) = cv2.boundingRect(approx)
        ar = w / float(h)

        # a square will have an aspect ratio that is approximately
        # equal to one, otherwise, the shape is a rectangle
        if 0.75 <= ar <= 1.35:
            shape = "square"
            self.s3 = self.s3 + 1
        else:
            shape = "rectangle"
            self.s4 = self.s4 + 1

    # otherwise, we assume the shape is a circle
    else:
        shape = "circle"
        self.s5 += 1

1 Ответ

0 голосов
/ 12 марта 2019

Я решаю свою проблему, значительно реорганизовав свой код и добавив

if shape == "circle":
    circles = cv2.HoughCircles(thresh,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)
    if circles is not None:
        s5 += 1

В новую область кода. Спасибо всем за помощь.

...