Python图像处理库PIL的ImagePath模块介绍
来自: http://blog.csdn.net/icamera0/article/details/50807121
ImagePath模块被用于存储和操作二维向量数据。Path对象会被传递到ImageDraw模块中。
一、ImagePath模块的函数
1、 Path
定义:ImagePath.Path(coordinates) ⇒ Path instance
含义:创建一个path对象。坐标列表可以是任何形式的序列对象,其包括二元组[(x,y),…]或者数值[x,y,…]。
用户也可以从另一个path对象中创建一个新的path对象。
在1.1.6及其以后的版本中,用户也可以进入任何实现了python buffer API的对象。这个buffer应该提供读操作,并且containC floats in machine byte order。
Path对象实现了大多数python的序列接口,像一个(x,y)对的序列。用户可以使用len()函数,访问其内部项,切分。但是,当前的版本不支持切分对齐,或者内部项和切分块删除。
二、ImagePath模块的方法
1、 Compact
定义:p.compact(distance=2) ⇒ count
含义:通过去除彼此接近的点压缩这path。这个方法会修改path本身,返回删除掉的点的个数。
变量distance按照城市距离来计算,默认为两个像素点。
例子:
>>> from PIL importImagePath >>> path =ImagePath.Path((0,0,1,1,2,2,3,3,4,4,4,4,5,5,5,5,6,6)) >>> len(path) 9 >>> path.compact(2) 2 >>> len(path) 7
通过该函数,将path对象中的(4,4,4,4,5,5,5,5)进行了压缩,所以path对象的长度减小了2。
2、 Getbbox
定义:p.getbbox() ⇒ 4-tuple
含义:获取path对象的边界框。
例子:
>>> from PIL importImagePath >>> path= ImagePath.Path((0,0,1,1,2,2,3,3,4,4,4,4,5,5,5,5,6,6)) >>> len(path) 9 >>> path.getbbox() (0.0, 0.0, 6.0, 6.0)
对于坐标组(0,0,1,1,2,2,3,3,4,4,4,4,5,5,5,5,6,6),它的左上角为(0,0),右下角为(6,6),所以该方法返回的四元组为(0.0,0.0, 6.0, 6.0)。
3、 Map
定义:p.map(function)
含义:通过变量function指定的函数映射path对象。
例子:
该例子还需要再研究一下。
4、 Tolist
定义:p.tolist() ⇒ list
含义:将path对象转换为python list[(x,y),…]。
例子:
>>> from PIL importImagePath >>> path =ImagePath.Path((0,0,1,1,2,2,3,3,4,4,4,4,5,5,5,5,6,6)) >>> path.tolist() [(0.0, 0.0), (1.0, 1.0), (2.0,2.0), (3.0, 3.0), (4.0, 4.0), (4.0, 4.0), (5.0, 5.0), (5.0, 5.0), (6.0, 6.0)]
5、 Transform
定义:p.transform(matrix)
含义:使用仿射变换对path对象进行转换。变量matrix为六元组,且按照下面的方式进行操作:
xOut = xIn * a + yIn * b + c
yOut = xIn * d + yIn * e + f
例子:
>>> from PIL importImagePath >>> path =ImagePath.Path((0,0,1,1,2,2,3,3,4,4,4,4,5,5,5,5,6,6)) >>> path.tolist() [(0.0, 0.0), (1.0, 1.0), (2.0,2.0), (3.0, 3.0), (4.0, 4.0), (4.0, 4.0), (5.0, 5.0), (5.0, 5.0), (6.0, 6.0)] >>>path.transform((2,3,1,3,2,2)) >>> path.tolist() [(1.0, 2.0), (6.0, 7.0), (11.0,12.0), (16.0, 17.0), (21.0, 22.0), (21.0, 22.0), (26.0, 27.0), (26.0, 27.0),(31.0, 32.0)]