尝试使用 cv2.fillPoly
对简单多边形进行栅格化时,我得到了奇怪的结果 - 没有零像素的总和是 10201,但它应该是 100*100。
pts = np.array([[0, 0], [100, 0], [100, 100], [0, 100], [0, 0]])
img = np.zeros((256, 256))
vertices = np.array([pts], dtype=np.int32)
mask = cv2.fillPoly(img, vertices, color=255)
print('np.count_nonzero(mask)', np.count_nonzero(mask))
怎么了?
最佳答案
您犯了一个简单的差一错误——它应该是 101 * 101
(即 10201)。
为了说明原因,让我们缩小问题的规模,并运行以下一组点的算法:
[[0, 0], [2, 0], [2, 2], [0, 2], [0, 0]]
并在以下网格上说明进度:
用这些顶点调用 cv2.fillPoly
会(概念上)做以下 5 件事:
结果是
如你所见,填充了 9 个像素:
- 使用了 3 列(0 到 2,包括在内,意思是
(2 - 0) + 1 == 3
)。 - 使用了 3 行(0 到 2,包括在内,意思是
(2 - 0) + 1 == 3
)。
同样,在您的情况下:(100 - 0 + 1) * (100 - 0 + 1) = 101 * 101 = 10201
关于python - cv2.fillPoly 奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52484507/