使用Python,获取多边形内的像素

时间:2019-04-15 21:10:05

标签: python opencv polygon mask

我有一个来自摄像机的流图像。通过此流图像,我创建了一大套多边形,每个多边形都是一个“关注区域”。然后,我使用多边形生成了一个蒙版并将该蒙版应用于流式图像,因此现在我只能“看到”被蒙版的区域。

我现在遇到的问题是如何确定遮罩区域内是否有东西(例如兔子,人,汽车等)-请注意,它到底有什么关系,该空间已被占用。

我发现拉普拉斯空间过滤器可以很好地观察是否存在于多边形中(至少在视觉上),但是我不知道下一步将是什么。我的想法是对黑白图像中的像素进行平均,如果它们超过阈值,则假设是肯定的。

包含多边形坐标的文件的布局为:

x1,y1;x2,y2;c3,y3;x4,y4,...
x1,y1;x2,y2;c3,y3;x4,y4,...
x1,y1;x2,y2;c3,y3;x4,y4,...
x1,y1;x2,y2;c3,y3;x4,y4,...
x1,y1;x2,y2;c3,y3;x4,y4,...

我读取多边形数组的代码如下:

pointlist = []
data = open(args["slots"]).read().split()
for row in data:
    tmp = []
    col = row.split(";")
    for points in col:
        xy = points.split(",")
        tmp += [[int(pt) for pt in xy]]
    pointlist += [tmp]
slots = np.asarray(pointlist)

图像遮罩和过滤如下:

    img = cv2.resize(img, (480, 270))

    blurred = cv2.GaussianBlur(img,(3, 3), 0)

    mask = np.zeros(blurred.shape[:2], dtype="uint8")

    cv2.fillPoly(mask,slots,(255,255,255))

    masked = cv2.bitwise_and(blurred,blurred,mask=mask)

    lap = cv2.Laplacian(masked, cv2.CV_64F)
    lap = np.uint8(np.absolute(lap))

如果您能给我一些下一步的示例代码,将不胜感激。

0 个答案:

没有答案