在numpy数组中生成填充的多边形,

时间:2019-02-18 08:36:56

标签: python arrays image numpy

我需要创建一个numpy数组,该数组将指示填充的多边形为1s,外部为0s。 在您说其重复的问题之前。我已经检查了许多其他问题和答案。终于让this处理了我的一个案例。但是,当更改4个顶点时,该功能不起作用。我试图更改其中的许多内容,但似乎没有任何效果,而且我根本无法理解有什么区别以及为何无法实现。

首先我与

合作
c = [[47, 187], [55, 47], [184, 186], [186, 46]]

在第一种情况下,一开始我有一些错误。点的顺序很重要。添加以下代码后,它工作正常。这里xylenXlenY的一半。

t = []
    for i in range(4):
        for j in c:
            if j[0]<x and j[1]<y:
                t.append(j)
                c.pop(c.index(j))
                break
        for j in c:
            if j[0]<x and j[1]>y:
                t.append(j)
                c.pop(c.index(j))
                break
        for j in c:
            if j[0]>x and j[1]>y:
                t.append(j)
                c.pop(c.index(j))
                break
        for j in c:
            t.append(j)
            c.pop(c.index(j))
            break
    c= np.array(t)

称为这样的函数,其中lenXlenY始终在200左右,点在范围内。

pol = create_polygon([lenX,lenY],c)

在第二种情况下,我的顶点是

c = [[96, 208],[97, 91], [221, 206], [221, 85]]

现在这行不通,我也不知道为什么。请看看是否可以找到我想念的东西。

1 个答案:

答案 0 :(得分:1)

您是否根据所链接问题的第二个答案更新了功能?第一个答案有问题

原始函数可以与您的第一组坐标一起使用,但是第二组数据给出警告除以零,请像这样修改检查函数,并且它应适用于所有坐标

def check(p1, p2, base_array):
 idxs =
np.indices(base_array.shape)

 p1= p1.astype(float)
 p2= p2.astype(float)

 if p1[0] == p2[0]:
   max_col_idx = (idxs[0] - p1[0] * idxs.shape[1]
   sign = np.sign(p2[1] - p1[1])
 else:
   max_col_idx = (idxs[0] - p1[0]) / (p2[0] - p1[0]) * (p2[1]-p1[1]) + p1[1]
   sign = np.sign(p2[0] - p1[0])
 return idxs[1] * sign <= max_col_idx * sign