使用PIL中Image.rotate()之后将回转后的非图像区域变成白色

9,347次阅读
12条评论

前言

最近有项目需要用到图像识别,然后就基于Python开发,同时使用了Opencv/PIL/numpy等图像算法以及识别库,但是在识别的图像中,可能由于人为的原因,摄像的尺度不是那么准确,但对于标记点来说整个图像识别的计算就可能要偏斜,后来就想到了可以通过图像回转将图片回正,然后再进行识别计算。 使用PIL中Image.rotate()之后将回转后的非图像区域变成白色

正文

在使用PIL里面的Image.rotate()进行图片回转后,回转的非图片区域就是黑色的,但是这个样子就和我个人的图像标识点产生冲突了,所以我们需要将非图片区域的黑色变成白色:

大概思路就是创建一个新的白色图层,然后将新图层与回转图层进行图像的一个复合,生成一个新的图像即可,以下为主要实现代码:

# 读取图片
pilim = Image.open('./res/use.jpg')
# 转换为有alpha层
im2 = pilim.convert('RGBA')
# 旋转
rot = im2.rotate(-18.0, expand=1)
# 创建一个与旋转图像大小相同的白色图像
fff = Image.new('RGBA', rot.size, (255,)*4)
# 使用alpha层的rot作为掩码创建一个复合图像
out = Image.composite(rot, fff, rot)
# 保存
out.convert(pilim.mode).save('./res/out.jpg')

后记

在图像算法识别中,要运用到大量的数学知识,所以博主先不给你们说了,我去补习一下初中数学先…. 使用PIL中Image.rotate()之后将回转后的非图像区域变成白色

6
憧憬Licoy
版权声明:本站原创文章,由憧憬Licoy于2018年04月14日发表,共计989字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(12条评论)
Loading...
小白 评论达人LV.1
2019-03-01 09:22:45 回复

何必这么麻烦,rotate的参数里就能选填充颜色

代写essay 评论达人LV.1
2018-06-01 22:39:50 回复

期待楼主的更新

精斑试纸 评论达人LV.1
2018-04-21 14:45:22 回复

第一图高大上有点阿凡达的感觉

闲鱼 评论达人LV.2
2018-04-20 21:41:48 回复

看不懂,只能666了 :sad:

网站建设 评论达人LV.2
2018-04-20 09:49:57 回复

好厉害啊

里维斯社 评论达人LV.1
2018-04-16 08:12:32 回复

算法好高级的样子,这是像人工智能