我需要创建一个numpy数组,该数组将指示填充的多边形为1s,外部为0s。 在您说其重复的问题之前。我已经检查了许多其他问题和答案。终于让this处理了我的一个案例。但是,当更改4个顶点时,该功能不起作用。我试图更改其中的许多内容,但似乎没有任何效果,而且我根本无法理解有什么区别以及为何无法实现。
首先我与
合作c = [[47, 187], [55, 47], [184, 186], [186, 46]]
在第一种情况下,一开始我有一些错误。点的顺序很重要。添加以下代码后,它工作正常。这里x
和y
是lenX
和lenY
的一半。
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)
称为这样的函数,其中lenX
和lenY
始终在200左右,点在范围内。
pol = create_polygon([lenX,lenY],c)
在第二种情况下,我的顶点是
c = [[96, 208],[97, 91], [221, 206], [221, 85]]
现在这行不通,我也不知道为什么。请看看是否可以找到我想念的东西。
答案 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