Python 通过多个凸多边形的坐标创建遮罩
我需要画一个基于N个凸多边形顶点数组的二维二元掩模Python 通过多个凸多边形的坐标创建遮罩,python,performance,numpy,Python,Performance,Numpy,我需要画一个基于N个凸多边形顶点数组的二维二元掩模 import numpy as np mask = np.zeros((100, 100), dtype=np.int8) polys = np.array([[[30,32], [36,46], [41,48], [50, 36]], [[10,32], [16,46], [30,48], [40, 36]], [[56,44], [58,70], [78,90],
import numpy as np
mask = np.zeros((100, 100), dtype=np.int8)
polys = np.array([[[30,32], [36,46], [41,48], [50, 36]],
[[10,32], [16,46], [30,48], [40, 36]],
[[56,44], [58,70], [78,90], [75,34]]], np.int32)
多边形之间的相交区域也应遮罩。我知道如何使用cv2库实现它:
import cv2
for i in polys.tolist():
cv2.fillConvexPoly(mask, np.array(i), 1)
imshow(mask, cmap='gray')
但是我不知道如何使用本机numpy操作(没有for循环)来减少运行函数的时间。可能重复@ZdaR我看到了这些问题,但我不知道如何将其用于多个polygons尝试阅读代码并理解其步骤,一旦你可以为一个操作,知道它实际上在做什么,然后你可以简单地将它扩展到任意数量的多边形谢谢,我已经试过了,我理解了每一步,但是我不能广播这些函数。如果我使用for循环,它不会比opencv解决方案更好。这里有一个替代方案:使用
cv2.line
在每个多边形的点之间画线。这将给我们一个轮廓化的图像。最后,从左上角开始对图像进行整体填充,这将为我们提供所需图像的反转版本,因此与最后一步相反。所有这些都是基于这样的假设,即cv2.line
比cv2.fillConverExpoly
快,我不确定这是真的。但是,我想值得一试!编辑:我不确定绘制直线是否会像使用cv2.fillconverxpoly
那样保持凸度,因此可能不正确。