文中的文本及图片来自互联网,仅作学习培训、沟通交流应用,不具备一切商业行为,著作权归创作者全部,如有什么问题请立即在线留言以作解决
下列文章内容来自腾讯云服务 创作者:Python神经病
伴随着圣诞节的来临,想给为自己的头像图片再加上一顶圣诞帽。要不是头像图片,就加一个圣诞老爷爷守候。
image.png
用Python给头像图片再加上圣诞帽 ,看过下大约也全是来源于2017年高手的文章内容:https://zhuanlan.zhihu.com/p/32283641
关键步骤
素材图片提前准备
人脸检验与人脸关键点检验
调节尺寸,加上遮阳帽
用dlib的正脸检测器开展人脸检验,用dlib出示的实体模型获取人脸的五个关键点
# dlib人脸关键点检测器 predictor_path = "shape_predictor_5_face_landmarks.dat" predictor = dlib.shape_predictor(predictor_path) # dlib正脸检测器 detector = dlib.get_frontal_face_detector() # 正脸检验 dets = detector(img, 1) # 假如检验到人脸 if len(dets)>0: for d in dets: x,y,w,h = d.left(),d.top(), d.right()-d.left(), d.bottom()-d.top() # x,y,w,h = faceRect cv2.rectangle(img,(x,y),(x w,y h),(255,0,0),2,8,0) # 关键点检验 ,五个关键点 shape = predictor(img, d) for point in shape.parts(): cv2.circle(img,(point.x,point.y),3,color=(0,255,0)) cv2.imshow("image",img) cv2.waitKey()
image
调节遮阳帽尺寸,带帽
选择2个眼尾的点,求管理中心做为置放遮阳帽的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))
加上小图标
自然一些同学们的头像图片并不是角色或不可以精确的鉴别不相干,全部加上了标志。(即在右下方加上小图标) 。
小图标防止简单 ,是以标志中任意挑选一个:
image.png
标志部位还可以依据喜好调节尺寸和部位
layer.paste(logo, (img.size[0] - logo.size[0], img.size[1]-logo.size[1]))
编码以下:
# 图片水印 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)
結果以下