私は単純なイメージ上に最小ボックスアウトラインを描こうとしています。boxPointsは負のy値を返します
しかし、boxPoints()関数から返された点の一つは、私の負のy値を与えます。この輪郭を描くとき、このコーナーが画像から引き出されます。それは負のyの値を返す理由
私はわかりません。私は画像のバイナリバージョンを使用していますので、最大の輪郭は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 ]]
https://docs.opencv.org/3.3.1/d3/dc0/group__imgproc__shape.html#ga3d476a3417130ae5154aea421ca7ead9 – zindarod