python-opencv2にて、普通に [[x1, y1], [x2, y2], [x3, y3] ....] 的な配列を突っ込んだら、np.int32だろうが何だろうが以下のエラーが出続けた話。
OpenCV Error: Assertion failed (p.checkVector(2, CV_32S) >= 0) in fillPoly, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/drawing.cpp, line 2373
ググってたどり着いたのはやはりstackoverflow、本当に有り難い…のだけど、既に閉じてしまって今検索しても何故か見つからない。悲しい (`;ω;´)
そんなわけで書いておきますが要するにreshapeして
[ [[x1, y1] ], [ [x2, y2]], [[x3, y3]] ... ]
のような超変な形に変えて、しかもfillPolyのptsに与えるやつをlistでくくる*1。これで動きました。
以下、動いたコードをコピペ
pix = 255 buf = np.zeros(bufshape, 'uint8') points = np.array(points).reshape((-1,1,2)).astype(np.int32) cv2.fillPoly(buf, pts=[points], color=pix)
このくだらねー処理に、何時間費やしたことか…
*1:これをしないと、Assertionは出なくなるがポリゴンフィルはされずに点だけ描画される