web-dev-qa-db-ja.com

Python楕円を画像に合わせる

OpenCVを使用したWebカメラフィードがあり、リアルタイムで楕円をフィットさせようとしています。

現在使用しているコードは機能しますが、多くの場合、画像に楕円を合わせることができません。画像に楕円を合わせる他の方法はありますか?

現在のコード:

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

これは、楕円をうまくフィットさせたいものの例です。私の現在のコードは、望まないときにこの画像で失敗します。

enter image description here

12
Sam

関数から最初の楕円を取得するだけで間違っていたことがわかりました。最初に計算された楕円が最も正しいと思いましたが、実際にやらなければならなかったのは、すべての楕円を調べて、画像内のオブジェクトの境界となる最も適切な楕円を選択することでした。

3
Sam

この画像で輪郭を再定義し続ける必要がないため、関数の外側で輪郭を定義します。

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

このコードが実行しているのは、しきい値の画像ストリームを取得し、その上に楕円を追加することです。後でコードで呼び出したいときに、次の行を使用します

thresh = create_ellipse(thresh,cnt)
0
user5038297