相关功能的实现主要使用了PIL(Pillow)库中的Image模块。现在用到了随手记录以下,后面专门写一篇博客介绍相关的接口功能。
如果想把一张图片转为numpy的array,先使用Image的open函数读取图片然后再使用np的asarray或者array接口将image转换为array。
Example: from PIL import Image import numpy as np img = Image.open("/home/yzh/1.jpg") im = np.asarray(img) im2 = np.array(img)将numpy的array转为image则使用Image的fromarray接口。 函数原型: Image.fromarray(obj, mode = None) 参数说明: obj: 要转换为image的array **mode:**要使用的转换模式,可选项:1、L、P、RGB、RGBA、CMYK等,常用的L表示黑白的图片,RGB表示3通道的真彩图片,要和array的shape大小对应,否则会报data not enough的错误。
Example: from PIL import Image import numpy as np img = Image.open("/home/yzh/1.jpg") im = np.asarray(img) new_img = Image.fromarray(np.uint8(im)) new_img.show() new_img.save("new_1.jpg")注意: 假如是自己定义的array或者从其它地方读取的array,要将array的数据类型转换为uint8,或者在fromearray中增加一个类型转换
如果要在图片上面画框可以通过ImageDrow模块的rectangle函数来实现。 函数原型:rectangle(xy, fill = None, outline = None, width = 1) 参数说明: xy: 定义边界的两个点,可选的输入顺序为[(x1, y1), (x2, y2)]或者[x1, y1, x2, y2]。绘制的矩形不包括第二个点 outline: 边框矩形的颜色 fill: 如过要对矩形内进行颜色填充,可以进行设置 width: 边框的宽度,以像素为单位,版本要大于5.3.0
Example: from PIL import Image, ImageDraw img = Image.open("/home/yzh/1.jpg") draw = ImageDraw.Draw(img) draw.rectangle([100, 100, 300, 300], outline = (0, 255, 255), fill = (255, 0, 0), width = 10) img.show() img.save("new_img.jpg")