使用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设计】网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

VSCode中自动为Python文件添加头部注释

VSCode中自动为Python文件添加头部注释

在实际编写Python文件时,往往需要为文件添加相关说明,例如文件名称、文件作用、创建时间、作者信息、版本号等等。这些信息往往是固定模板的,因此希望有一种方式可以自动的为我们添加上这些信...

python opencv 简单阈值算法的实现

python opencv 简单阈值算法的实现

本文先了解一个简单阈值函数,以了解一个阈值算法的具体参数。 然后比较不同阈值函数的区别。 同样的,先用一副图说明本文重要大纲: #! usr/bin/env python...

python如何实现excel数据添加到mongodb

利用pymongo包进行数据库的连接,使用xlrd包读取excel数据,由于二者数据结构的不同,要将excel格式数据转换为json格式数据。由于编码问题会出现“TypeError: '...

Python求平面内点到直线距离的实现

Python求平面内点到直线距离的实现

近期遇到个问题,需要计算平面内点到直线的距离,发现数学知识都还给老师了,度娘后找到计算方法,特此记录。 点到直线的计算公式: 通过公式推导,得到信息: A:直线斜率 B:固定值-1 C...

python网络编程学习笔记(四):域名系统

一、什么是域名系统 DNS 计算机域名系统 (DNS) 是由解析器以及域名服务器组成的。当我们在上网的时候,通常输入的是网址,其实这就是一个域名,而我们计算机网络上的计算机彼此之间只能用...