专栏名称: AI科技大本营
迎来到AI科技大本营。这里汇集了优秀的AI学习者,技术大咖和产业领袖;提供接地气的实战课程。在这里和优秀的人一起成长。
目录
相关文章推荐
赛博禅心  ·  MiniCPM 4.0 ... ·  昨天  
赛博禅心  ·  MiniCPM 4.0 ... ·  昨天  
黄建同学  ·  RAG 的下一个阶段 :带推理能力的 ... ·  昨天  
硅基流动  ·  硅基流动完成新一轮数亿元融资 ·  昨天  
硅基流动  ·  硅基流动完成新一轮数亿元融资 ·  昨天  
爱可可-爱生活  ·  今日推介(第1795期):通过问题复杂性视角 ... ·  2 天前  
51好读  ›  专栏  ›  AI科技大本营

圣诞节,教你用Python给微信头像添加一个圣诞帽

AI科技大本营  · 公众号  · AI  · 2020-12-25 18:19

正文

请到「今天看啥」查看全文


import cv2from PIL import ImagepersonPath = '3.jpg' #头像hatPath = 'sheng.png' #圣诞帽personImg = cv2.imread(personPath)face_haar = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')#存放的绝对路径faces = face_haar.detectMultiScale(personImg, 1.1,5)personImg = Image.open(personPath)personImg = personImg.convert('RGBA')hatImg = Image.open(hatPath)hatImg = hatImg.convert('RGBA')for face_x,face_y,face_w,face_h in faces: face_x -= face_w-180 face_y += face_h-250 face_w *= 1 face_h *= 1 hatImg = hatImg.resize((face_w, face_h)) bg = (face_x, face_y - face_h + 100 , face_x + face_w, face_y + 100 ) personImg.paste(hatImg, bg, mask = hatImg)#将调整好的帽子贴上去personImg.save('addHat.png')

下面对代码进行讲解。

首先,引入两个模块,用cv2.imread(personPath)来读取相对路径下的图片。

“cv2.imread('图像路径','读取方式'):默认为cv2.imread_color以彩色图像模式读取。

cv2.CascadeClassifier('分类器的路径'):简单来说就是做人脸检测的一个必备方面,专业名词叫做级联分类器。这个分类器到目前版本容纳了Haar特征器和LBP特征分类器两个分类器。这次我们使用常规用的Harr特征器”

Haar特征分类器就是一个xml文件,是OpenCV官方训练好的检测器,它能反应图像的灰度变化,以像素分模块求差值的一种特征。下面我们讲讲它的路径

在我们准备工作中我们在OpenCV的官网下载了人脸识别的插件。

以安装在D盘为例, Harr特征分类器就在我们的:

D:\opencv\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml

注意:在第6行代码中,我们调用这个特征器的路径最好使用绝对路径!上述代码只是演示

关键代码就是:

detectMultiScale(image,scaleFactor,minNeighbors)。

检验出图片中的所有人脸,并以向量类型保存各个人脸的位置和大小,最后用矩形Rect类表示,该函数由分类器((也就是上述的Haar特征分类器))的对象进行调用。

其中参数如下:

“image是我们要做人脸检测的图片。

scaleFactor表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;

minNeighbors表示构成检测目标的相邻矩形的最小个数(默认为3个)。”

而后就是我们常见的用Pillow模块打开两张图片,不过这次的打开方式是以RGBA模式打开,即四通道模式(A指透明度)。

最后一个for循环就是读取用cv2解析出来的帽子faces参数,这里有趣的一点是,cv2做人脸识别后,会在两眼之间画一条线,并以中间为原点,做x和y轴建立坐标系。最后调节Pillow解析出来的帽子x和y位置,摆到人头上方。所有这个方法对正脸敏感,对侧脸不太友好。

personImg.save('addHat.png')表示存储添加圣诞帽后的照片。


GUI框架整合


现在我们在上一节的基础上,将圣诞帽添加与GUI框架进行整合,还是先上代码之后拆分讲解

import PySimpleGUI as






请到「今天看啥」查看全文