创建用1填充的的数组python_从多边形点Python创建一个填充的numpy数组

如果有人能帮助我更快地解决我的问题,我将不胜感激。在

这是场景:-I有一个浮点数多边形,我想映射到一个网格。网格单元可以是不同的宽度和高度,而不是像我的图像所显示的一样统一。即矩形。在

我试过使用图像绘制,但它只使用整数。将浮点数转换成整数意味着我必须放大浮点数并去掉小数点以保持一定的精度,但是图像绘制无法处理较大的多边形点。在

有没有更雄辩和快速的方法来实现一个数字数组1(蓝色)的填充区域的多边形和0(红色)的其余部分。我已经读了一点关于网格网格,但看不出它如何可以用于这个场景。在

非常感谢

代码的结果是cols = 4

rows = 4

points = [[1535116L, 1725047L], [1535116L, 2125046L], [-464884L, 2125046L], [-464884L, 125046L]]

bbCut = getPythonBoundBox(points)

cutWidth = bbCut[1][0]-bbCut[0][0]

scale = float(cutWidth) / float(rows)

###Center data to origin

for p in range(len(points)):

points[p][0] -= (bbCut[1][0] - bbCut[0][0])/2

points[p][1] -= (bbCut[1][1] - bbCut[0][1])/2

points[p][0] /= scale

points[p][1] /= scale

##move points to Zero

bbCut = getPythonBoundBox(points)

for p in range(len(points)):

points[p][0] -=bbCut[0][0]

points[p][1] -=bbCut[0][1]

pointToTuple= []

for p in range(len(points)):

pointToTuple.append((points[p][0], points[p][1]))

imgWidth = float(rows)

imgHeight = float(cols)

img = Image.new('L', (int(imgWidth), int(imgHeight)), 0)

draw = ImageDraw.Draw(img)

draw.polygon(pointToTuple, fill=1)

array = np.reshape(list(img.getdata()), (cols, rows))

############This is the result from the array############

##If you compare this array to the coloured scaled image ive have drawn

##its missing a 1 on the second value in the first row

##and another 1 on the second row 3rd value

##I'm assuming there is some parsing happening here with float to int?

array([1, 0, 0, 0])

array([1, 1, 0, 0])

array([1, 1, 1, 1])

array([1, 1, 1, 1])

#########################################################

def getPythonBoundBox(points):

bigNumber = 10e10

xmin = bigNumber

xmax = -bigNumber

ymin = bigNumber

ymax = -bigNumber

g = []

a = len(points)

for i in xrange(a):

if points[i][0] < xmin: xmin = points[i][0]

if points[i][0] > xmax: xmax = points[i][0]

if points[i][1] < ymin: ymin = points[i][1]

if points[i][1] > ymax: ymax = points[i][1]

p1 = [xmin,ymin]

g.append(p1)

p2 = [xmax,ymax]

g.append(p2)

return (g)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值