我需要将图像创建为2D numpy数组。对于背景,图像像素值为0,而在我要绘制的某些多边形中则为1。我正在处理大图像,因此避免不必要的数据复制很重要。
我开始使用PIL图片以从PIL.ImageDraw
模块中受益。
这里是一个例子:
shape = (768, 1024) # YX (rows, cols) convention
triangle = [(10, 10), (1014, 10), (512, 758)] # XY convention
imgMask = Image.new('L', (shape[1], shape[0]), 0) # XY
ImageDraw.Draw(imgMask).polygon(triangle, outline=1, fill=1)
mask = numpy.array(imgMask, copy=False)
不幸的是,最后一行似乎总是导致数据的副本。我怀疑PIL数组接口总是返回其数据缓冲区的副本。
是否可以直接访问PIL图像数据缓冲区?