为什么PIL绘制多边形不接受numpy数组?

时间:2018-04-05 16:10:37

标签: python numpy python-imaging-library

此代码按预期工作:

import numpy as np
from PIL import Image, ImageDraw

A = (
    (  2,  2),
    (  2, 302),
    ( 302, 302),
    ( 302,   2)
)

img = Image.new('L', (310, 310), 0)
ImageDraw.Draw(img).polygon(A, outline=1, fill=1)
mask = np.array(img)

print(mask)

但是,如果A矩阵以numpy数组的形式提供:

A = np.array(
    [[  2,  2],
     [  2, 302],
     [302, 302],
     [302,   2]], dtype="int32"
)

它会产生完全错误的结果。我也试图压扁A阵列,它没有帮助。

我错过了什么吗?我可以将numpy数组直接填入PIL吗?

1 个答案:

答案 0 :(得分:3)

如果call-interaface表示使用元组列表或交错值列表,

最好使用元组列表或交错值的序列/列表:

  

<强> xy
  绘制一个多边形。

     

多边形轮廓由给定坐标之间的直线加上最后一个和第一个坐标之间的直线组成。

     

[(x, y), (x, y), ...] - 的序列<2>元组,如 [x, y, x, y, ...]
,数字值,例如 >>> xy array([[ 2, 3], [10, 3], [10, 0], [ 2, 0]]) >>> xy.flatten().tolist() [ 2, 3, 10, 3, 10, 0, 2, 0 ] >>>

我可以填...

使用

ImageDraw.polygon()

应该工作并满足PIL记录的呼叫界面 (* Remove contiguous duplicates from a lost *) # let rec destutter list = match list with | [] -> [] | [hd1] -> [hd1] | hd1 :: hd2 :: tl -> if hd1 = hd2 then destutter (hd2 :: tl) else hd1 :: destutter (hd2 :: tl) ;;