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

10,629次阅读
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()之后将回转后的非图像区域变成白色

正文结束
 8
憧憬Licoy
版权声明:本站原创文章,由 憧憬Licoy 2018-04-14发表,共计623字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(12条评论)
验证码
载入中...
小白 评论达人 LV.1
2019-03-01 09:22:45 回复

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

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

期待楼主的更新

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

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

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

看不懂,只能666了 :sad:

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

好厉害啊

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

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

 Windows  Chrome