2017-11-13 8 views
1

私は単純なイメージ上に最小ボックスアウトラインを描こうとしています。boxPointsは負のy値を返します

Original Image

しかし、boxPoints()関数から返された点の一つは、私の負のy値を与えます。この輪郭を描くとき、​​このコーナーが画像から引き出されます。それは負のyの値を返す理由

Resulting Outline

私はわかりません。私は画像のバイナリバージョンを使用していますので、最大の輪郭はpostItノートのアウトラインにする必要があります。他のコーナーのいずれかが正しくピックアップされません。これを修正する方法についてはあまりよく分かりません。以下のコードを参照してください:

def contours(image): 
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
    gray = cv2.GaussianBlur(gray, (5, 5), 0) 
    gray = cv2.dilate(gray, None) # fill some holes 
    gray = cv2.dilate(gray, None) 
    gray = cv2.erode(gray, None) # dilate made our shape larger, revert that 
    gray = cv2.erode(gray, None) 

    # first threshold the image to create a binary image of black and white 
    ret, thresh = cv2.threshold(gray, 127, 255, 0) 

    # contours output var is a list of each coordinate in the contour 
    # use CHAIN_APPROX_SIMPLE to pick only necessary contour points rather than all points on the contour 
    img,cnt,hier = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 

    # get the min area rect 
    rect = cv2.minAreaRect(cnt[0]) 
    print(rect) 
    box = cv2.boxPoints(rect) 
    print(box) 
    # convert all coordinates floating point values to int 
    box = np.int32(box) 
    cv2.drawContours(image, [box], 0, (0, 0, 255)) 
    cv2.imshow('Corners1', image) 
    cv2.waitKey(0) 

印刷minAreaRectとboxPointsは以下のとおりです。

((182.83834838867188, 139.0049591064453), (208.65762329101562, 247.1478271484375), -31.165145874023438) 
[[ 157.5166626 298.73544312] 
[ 29.61603546 87.25617981] 
[ 208.16003418 -20.7255249 ] 
[ 336.06066895 190.7537384 ]] 
+0

https://docs.opencv.org/3.3.1/d3/dc0/group__imgproc__shape.html#ga3d476a3417130ae5154aea421ca7ead9 – zindarod

答えて

2

あなたはこのライブラリでボックス機能を使用しているように見えます。結果のイメージでは、すべての角度が90度であることがわかります。したがって、必要なことは、ポリゴンを矩形にすることではありません。負のy値は、この直角のボックスの結果です。

+0

ああ、意味があります!それを指摘してくれてありがとう! – Rachel

関連する問題