Как отрезать круг от контура? - PullRequest
0 голосов
/ 09 мая 2019

ЦЕЛЬ: Найти мяч в OpenCV

ВЫПУСК: У меня есть маска, которую я получил с помощью hsv-границ для моего шара, но часть фона кровоточит в моей маске.Как я могу отделить круг, который я хочу от фона, которого я не делаю?Я подозреваю, что проблема в том, что я использую minEnclosingCircle, но я не знаю, что еще использовать

Я пытался стереть маску, чтобы отделить круг, но это не очень мне помогает

Маска

mask

Результирующий круг

resulting circle


def draw_circle(orig,mask,name):
    cnts=cv2.findContours(mask.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    cnts=imutils.grab_contours(cnts)
    center=None
    if len(cnts)>0:
        c=max(cnts,key=cv2.contourArea)
        ((x,y),radius)=cv2.minEnclosingCircle(c)
        M=cv2.moments(c)
        center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
        if radius > 10:
            cv2.circle(orig, (int(x), int(y)), int(radius),
                (0, 255, 255), 2)
            cv2.circle(orig, center, 5, (0, 0, 255), -1)
        #d=int(name.split(".JPG")[0])
        #expected_R=(231*1.6)/(2*d)
        #error=1.0-(radius/expected_R)
        #print "error is "+str(error)

    else:
        print "oops"
    cv2.imshow(str(name)+" circled",orig)
    cv2.imshow(str(name)+" mask",mask)
    cv2.waitKey(0)

1 Ответ

1 голос
/ 09 мая 2019

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

Другим подходом может быть преобразование Хафа для окружностей , алгоритм, настроенный для обнаружения окружностей, но по сравнению с ранее представленным подходом он более затратен в вычислительном отношении. Смотрите следующую ссылку :

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

...