Python 通过多个凸多边形的坐标创建遮罩

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],

我需要画一个基于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], [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
那样保持凸度,因此可能不正确。