Python Установите эллипс на изображение

У меня есть веб-камера, использующая OpenCV, и я пытаюсь установить эллипс в режиме реального времени.

Код, который я использую в данный момент, работает, но он не может долгое время эллипсировать изображение. Какие другие методы эллипса подходят для изображения, я могу преследовать?

Текущий код:

def find_ellipses(img): #img is grayscale image of what I want to fit
        ret,thresh = cv2.threshold(img,127,255,0)
        _,contours,hierarchy = cv2.findContours(thresh, 1, 2)

        if len(contours) != 0:
            for cont in contours:
                if len(cont) < 5:
                    break
                elps = cv2.fitEllipse(cont)
                return elps  #only returns one ellipse for now
        return None

Где elps имеет вид (x_centre,y_centre),(minor_axis,major_axis),angle

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

введите описание изображения здесь

Ответ 1

Оказывается, я ошибался, это просто получение первого эллипса из этой функции. Хотя я думал, что первый рассчитанный эллипс был наиболее правильным, мне действительно нужно было пройти через все эллипсы - и выбрать наиболее подходящий, который ограничивал объект на изображении.

Ответ 2

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

def create_ellipse(thresh,cnt):
    ellipse = cv2.fitEllipse(cnt)
    thresh = cv2.ellipse(thresh,ellipse,(0,255,0),2)
    return thresh

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

thresh = create_ellipse(thresh,cnt)