Python实战之基于OpenCV的美颜挂件制作_第1页
Python实战之基于OpenCV的美颜挂件制作_第2页
Python实战之基于OpenCV的美颜挂件制作_第3页
Python实战之基于OpenCV的美颜挂件制作_第4页
Python实战之基于OpenCV的美颜挂件制作_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Python实战之基于OpenCV的美颜挂件制作#用于人脸和鼻子检测的级联分类器

face_cascade=cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

nose_cascade=cv2.CascadeClassifier("haarcascade_mcs_nose.xml")

#加载胡子图像

img_moustache=cv2.imread('moustache.png',-1)

#创建胡子蒙版

img_moustache_mask=img_moustache[:,:,3]

#将胡子图像转换为BGR图像

img_moustache=img_moustache[:,:,0:3]

#创建VideoCapture对象

video_capture=cv2.VideoCapture(0)

whileTrue:

#从VideoCapture对象捕获帧

ret,frame=video_capture.read()

#将frame转换为灰度图像

gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

#检测人脸

faces=face_cascade.detectMultiScale(gray,1.3,5)

#迭代检测到的人脸

for(x,y,w,h)infaces:

#根据检测到的人脸大小创建ROI

roi_gray=gray[y:y+h,x:x+w]

roi_color=frame[y:y+h,x:x+w]

#在检测到的人脸中检测鼻子

noses=nose_cascade.detectMultiScale(roi_gray)

for(nx,ny,nw,nh)innoses:

#计算将放置“胡子”挂件的坐标

x1=int(nx-nw/2)

x2=int(nx+nw/2+nw)

y1=int(ny+nh/2+nh/8)

y2=int(ny+nh+nh/4+nh/6)

ifx10orx20orx2wory2h:

continue

#计算“胡子”挂件区域的尺寸

img_moustache_res_width=int(x2-x1)

img_moustache_res_height=int(y2-y1)

#根据挂件区域缩放“胡子”蒙版

mask=cv2.resize(img_moustache_mask,(img_moustache_res_width,img_moustache_res_height))

#翻转蒙版

mask_inv=cv2.bitwise_not(mask)

#缩放“胡子”挂件

img=cv2.resize(img_moustache,(img_moustache_res_width,img_moustache_res_height))

#从原始图像中获取ROI

roi=roi_color[y1:y2,x1:x2]

#创建ROI前景和背景

roi_bakground=cv2.bitwise_and(roi,roi,mask=mask_inv)

roi_foreground=cv2.bitwise_and(img,img,mask=mask)

#roi_bakground与roi_foreground加和获取结果

res=cv2.add(roi_bakground,roi_foreground)

roi_color[y1:y2,x1:x2]=res

break

#显示结果

cv2.imshow('Snapchat-basedOpenCVmoustacheoverlay',frame)

#按下“q”键退出

ifcv2.waitKey(1)0xFF==ord('q'):

break

#释放资源

video_capture.release()

cv2.destroyAllWindows()

眼镜挂件融合

在这一实战程序中,我们将学习在检测到的面部眼睛区域上融合眼镜挂件。我们通过下图首次查看程序预期结果:

同样为了实现眼镜挂件融合,需要首先使用眼睛检测器检测图像中的眼睛:

eyepair_cascade=cv2.CascadeClassifier("haarcascade_mcs_eyepair_big.xml")

上图中青色矩形表示检测到的人脸在图像中的位置和大小;粉红色矩形表示图像中检测到的眼睛;黄色矩形表示眼镜将被覆盖的位置,其根据眼睛所在区域的位置和大小进行计算。

同时,为融合的眼镜眼镜挂件图像增加一些透明度,以使它们更逼真,眼镜图像蒙版如下所示:

融合后的结果图像如下图所示:

基本代码与上例相同,因此不再进行赘述,需要注意的是“眼镜”挂件的融合区域计算。

importcv2

face_cascade=cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

eyepair_cascade=cv2.CascadeClassifier("haarcascade_mcs_eyepair_big.xml")

img_glasses=cv2.imread('glasses.png',-1)

img_glasses_mask=img_glasses[:,:,3]

img_glasses=img_glasses[:,:,0:3]

video_capture=cv2.VideoCapture(0)

whileTrue:

ret,frame=video_capture.read()

gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

#检测人脸

faces=face_cascade.detectMultiScale(gray,1.3,5)

for(x,y,w,h)infaces:

roi_gray=gray[y:y+h,x:x+w]

roi_color=frame[y:y+h,x:x+w]

#在检测到的人脸中检测眼睛

eyepairs=eyepair_cascade.detectMultiScale(roi_gray)

for(ex,ey,ew,eh)ineyepairs:

#计算“眼睛”挂件放置的坐标

x1=int(ex-ew/10)

x2=int((ex+ew)+ew/10)

y1=int(ey)

y2=int(e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论