使用Python给头像加上圣诞帽或圣诞老人小图标附源码

yipeiwu_com6年前Python基础

随着圣诞的到来,想给给自己的头像加上一顶圣诞帽。如果不是头像,就加一个圣诞老人陪伴。

用Python给头像加上圣诞帽,看了下大概也都是来自2017年大神的文章:https://zhuanlan.zhihu.com/p/32283641

主要流程
素材准备
人脸检测与人脸关键点检测

调整大小,添加帽子

用dlib的正脸检测器进行人脸检测,用dlib提供的模型提取人脸的五个关键点

调整帽子大小,带帽

选取两个眼角的点,求中心作为放置帽子的x方向的参考坐标,y方向的坐标用人脸框上线的y坐标表示。然后我们根据人脸检测得到的人脸的大小调整帽子的大小,使得帽子大小合适。

# 选取左右眼眼角的点
    point1 = shape.part(0)
    point2 = shape.part(2)
    # 求两点中心
    eyes_center = ((point1.x+point2.x)//2,(point1.y+point2.y)//2)
    # cv2.circle(img,eyes_center,3,color=(0,255,0)) 
    # cv2.imshow("image",img)
    # cv2.waitKey()
    # 根据人脸大小调整帽子大小
    factor = 1.5
    resized_hat_h = int(round(rgb_hat.shape[0]*w/rgb_hat.shape[1]*factor))
    resized_hat_w = int(round(rgb_hat.shape[1]*w/rgb_hat.shape[1]*factor))
    if resized_hat_h > y:
     resized_hat_h = y-1
    # 根据人脸大小调整帽子大小
    resized_hat = cv2.resize(rgb_hat,(resized_hat_w,resized_hat_h))

添加小图标

当然有些同学的头像不是人物或不能准确的识别无关,所有添加了标识。(即在右下添加小图标)。

小图标避免单调,是从图标中随机选择一个:

代码如下:

# 水印图片
 num = random.randint(1, 5)
 logo = Image.open("img_icon/santa_" + str(num) + ".png")
 
 img = Image.open(imgPath)
 
 print(img.size, logo.size)
 
 # 图层
 layer = Image.new("RGBA", img.size, (255, 255, 255, 0))
 layer.paste(logo, (img.size[0] - logo.size[0], img.size[1]-logo.size[1]))

 # 覆盖
 img_after = Image.composite(layer, img, layer)
 # img_after.show()
 img_after.save(outImgePath)

结果如下

源代码:https://github.com/silencesmile/Christmas_Hat

总结

以上所述是小编给大家介绍的使用Python给头像加上圣诞帽或圣诞老人小图标附源码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对【听图阁-专注于Python设计】网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

Python时间获取及转换知识汇总

 时间处理是我们日常开发中最最常见的需求,例如:获取当前datetime、获取当天date、获取明天/前N天、获取当天开始和结束时间(00:00:00 23:59:59)、获取...

Python实现二分查找与bisect模块详解

前言 其实Python 的列表(list)内部实现是一个数组,也就是一个线性表。在列表中查找元素可以使用 list.index() 方法,其时间复杂度为O(n) 。对于大数据量,则可以用...

python使用phoenixdb操作hbase的方法示例

今天看看怎样在 python 中使用 phoenixdb 来操作 hbase 安装 phoenixdb 库 pip install phoenixdb 例子 首先启动 que...

python测试mysql写入性能完整实例

本文主要研究的是python测试mysql写入性能,分享了一则完整代码,具体介绍如下。 测试环境: (1) 阿里云服务器centos 6.5 (2) 2G内存 (3) 普通硬盘 (4)...

Python元组操作实例分析【创建、赋值、更新、删除等】

Python元组操作实例分析【创建、赋值、更新、删除等】

本文实例讲述了Python元组操作。分享给大家供大家参考,具体如下: #coding=utf8 ''''' 元组是跟列表非常相近的另一种容器类型。 元组是一种不可变类型,一旦创建不可...