輪郭からマスクを作成しようとしていますが、C++エラーが発生します。
OS X Yosemiteを使用して、Python 2.7.10、OpenCV 3.1.0。
def create_mask(img, cnt):
'''Create a mask of the same size as the image
based on the interior of the contour.'''
mask = np.zeros((img.shape[0], img.shape[1]), np.uint8)
print("create_mask, cnt=%s" % cnt)
cv2.drawContours(mask, [cnt], 0, (0, 255, 0), -1)
return mask
print("Creating mask from contour %s, on raw shape %s" % (page_contour, raw.shape))
page_mask = create_mask(raw, page_contour)
出力(エラーについては下を参照):
Creating mask from contour [[ 1626. 360.]
[ 1776. 3108.]
[ 126. 3048.]
[ 330. 486.]], on raw shape (3840, 2160, 3)
create_mask, cnt=[[ 1626. 360.]
[ 1776. 3108.]
[ 126. 3048.]
[ 330. 486.]]
OpenCV Error: Assertion failed (npoints > 0) in drawContours, file /tmp/opencv320160309-92782-1efch74/opencv-3.1.0/modules/imgproc/src/drawing.cpp, line 2380
Traceback (most recent call last):
File "./books.py", line 209, in <module>
page_mask = create_mask(raw, page_contour)
File "./books.py", line 123, in create_mask
cv2.drawContours(mask, [cnt], 0, (0, 255, 0), -1)
cv2.error: /tmp/opencv320160309-92782-1efch74/opencv-3.1.0/modules/imgproc/src/drawing.cpp:2380: error: (-215) npoints > 0 in function drawContours
docs は配列の配列を取得する必要があると言っていますが、これは私が提供しているようです。何が問題なのですか?
コードはOpenCV 2.xから移植されています。
これを使用するだけで動作します...
ctr = np.array(cnt).reshape((-1,1,2)).astype(np.int32)
cv2.drawContours(mask, [ctr], -1, 255, -1)