1.瘦脸结果图
import dlib
import cv2
import numpy as np
import math

predictor_path = ‘shape_predictor_68_face_landmarks.dat’

使用dlib自带的frontal_face_detector作为我们的特征提取器

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(predictor_path)

def landmark_dec_dlib_fun(img_src):#转灰度图img_gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)cv2.imshow('grayimg',img_gray)land_marks = []rects = detector(img_gray, 0)print(rects)for i in range(len(rects)):land_marks_node = np.matrix([[p.x, p.y] for p in predictor(img_gray, rects[i]).parts()])for idx,point in enumerate(land_marks_node):# 68点坐标pos = (point[0,0],point[0,1])print(idx,pos)# 利用cv2.circle给每个特征点画一个圈,共68个cv2.circle(img_src, pos, 5, color=(0, 255, 0))# 利用cv2.putText输出1-68font = cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img_src, str(idx + 1), pos, font, 0.5, (0, 0, 0), 1, cv2.LINE_AA)land_marks.append(land_marks_node)return land_marks

图像局部扭曲算法有三个:局部缩放(Local Scaling)算法、局部平移(Local Transition)算法和局部旋转(Local Rotation)算法。其中应用局部缩放算法可实现眼睛放大,局部平移算法则可用于实现瘦脸效果。

'''
方法: Interactive Image Warping 局部平移算法
'''#startX, startY,left_landmark[0, 0], left_landmark[0, 1]
#endPt[0, 0], endPt[0, 1]
#r_left,r_right为半径
def localTranslationWarp(srcImg, startX, startY, endX, endY, radius):ddradius = float(radius * radius)copyImg = np.zeros(srcImg.shape, np.uint8)copyImg = srcImg.copy()# 计算公式中的|m-c|^2ddmc = (endX - startX) * (endX - startX) + (endY - startY) * (endY - startY)H, W, C = srcImg.shapefor i in range(W):for j in range(H):# 计算该点是否在形变圆的范围之内# 优化,第一步,直接判断是会在(startX,startY)的矩阵框中if math.fabs(i - startX) > radius and math.fabs(j - startY) > radius:continuedistance = (i - startX) * (i - startX) + (j - startY) * (j - startY)if (distance < ddradius):# 计算出(i,j)坐标的原坐标# 计算公式中右边平方号里的部分ratio = (ddradius - distance) / (ddradius - distance + ddmc)ratio = ratio * ratio# 映射原位置UX = i - ratio * (endX - startX)UY = j - ratio * (endY - startY)# 根据双线性插值法得到UX,UY的值value = BilinearInsert(srcImg, UX, UY)# 改变当前 i ,j的值copyImg[j, i] = valuereturn copyImg
def BilinearInsert(src, ux, uy):w, h, c = src.shapeif c == 3:x1 = int(ux)x2 = x1 + 1y1 = int(uy)y2 = y1 + 1part1 = src[y1, x1].astype(np.float) * (float(x2) - ux) * (float(y2) - uy)part2 = src[y1, x2].astype(np.float) * (ux - float(x1)) * (float(y2) - uy)part3 = src[y2, x1].astype(np.float) * (float(x2) - ux) * (uy - float(y1))part4 = src[y2, x2].astype(np.float) * (ux - float(x1)) * (uy - float(y1))insertValue = part1 + part2 + part3 + part4return insertValue.astype(np.int8)def face_thin_auto(src):#68个关键点二维数组landmarks = landmark_dec_dlib_fun(src)# 如果未检测到人脸关键点,就不进行瘦脸if len(landmarks) == 0:returnfor landmarks_node in landmarks:#第4个点左left_landmark = landmarks_node[3]#第6个点左left_landmark_down = landmarks_node[5]#第14个点右right_landmark = landmarks_node[13]#第16个点右right_landmark_down = landmarks_node[15]#第31个点鼻尖endPt = landmarks_node[30]# 计算第4个点到第6个点的距离作为瘦脸距离r_left = math.sqrt((left_landmark[0, 0] - left_landmark_down[0, 0])== * (left_landmark[0, 0] - left_landmark_down[0, 0]) +(left_landmark[0, 1] - left_landmark_down[0, 1]) * (left_landmark[0, 1] - left_landmark_down[0, 1]))# 计算第14个点到第16个点的距离作为瘦脸距离r_right = math.sqrt((right_landmark[0, 0] - right_landmark_down[0, 0]) * (right_landmark[0, 0] - right_landmark_down[0, 0]) +(right_landmark[0, 1] - right_landmark_down[0, 1]) * (right_landmark[0, 1] - right_landmark_down[0, 1]))# 瘦左边脸thin_image = localTranslationWarp(src, left_landmark[0, 0], left_landmark[0, 1], endPt[0, 0], endPt[0, 1],r_left)# 瘦右边脸thin_image = localTranslationWarp(thin_image, right_landmark[0, 0], right_landmark[0, 1], endPt[0, 0],endPt[0, 1], r_right)# 显示cv2.imshow('thin', thin_image)cv2.imwrite('thin.jpg', thin_image)
src = cv2.imread('1.jpg')
cv2.imshow('src', src)
face_thin_auto(src)
# cv2.waitKey(0)img = cv2.imread('1.jpg')
rects = detector(img, 0)
print(rects)
#绘制关键点
for i in range(len(rects)):land_marks_node = np.matrix([[p.x, p.y] for p in predictor(img, rects[i]).parts()])for idx,point in enumerate(land_marks_node):# 68点坐标pos = (point[0,0],point[0,1])print(idx,pos)# 利用cv2.circle给每个特征点画一个圈,共68个cv2.circle(img, pos, 5, color=(0, 255, 0))# 利用cv2.putText输出1-68font = cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img, str(idx + 1), pos, font, 0.5, (0, 0, 0), 1, cv2.LINE_AA)
cv2.imshow('img', img)
cv2.waitKey(0)

opencv+Dlib python瘦脸代码相关推荐

  1. 人脸识别系统OpenCV+dlib+python(含数据库)Pyqt5界面设计 项目源码 毕业设计

    一.项目主要技术 Python语言.dlib.OpenCV.Pyqt5界面设计.sqlite3数据库 本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量 ...

  2. 使用OpenCV和Python进行对象检测和跟踪

    在此功能中,我将介绍使用OpenCV和Python代码设置对象检测和跟踪所需的功能.使用随附的代码片段,您可以轻松设置Raspberry Pi和网络摄像头,以便制作用于物体检测的便携式图像传感器. 本 ...

  3. 使用Python+OpenCV+dlib为人脸生成口罩

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达推荐阅读 42个pycharm使用技巧,瞬间从黑铁变王者Google ...

  4. 表情识别(二)——使用Dlib、opencv和Python标记和提取脸部的特定区域

    文章目录 使用Dlib.OpenCV和Python检测眼睛,鼻子,嘴唇和下巴引用函数 特征点和不同人脸部位的关系 可视化每一个人脸的部位特征 使用Dlib.OpenCV和Python提取脸的局部主函数 ...

  5. 人脸检测进阶:使用 dlib、OpenCV 和 Python 检测面部标记

    使用 dlib.OpenCV 和 Python 检测面部标记 今天,我们将使用dlib和OpenCV来检测图像中的面部标记.dlib的安装教程: https://wanghao.blog.csdn.n ...

  6. dlib 使用OpenCV,Python和深度学习进行人脸识别 源代码

    请直接访问原文章 dlib 使用OpenCV,Python和深度学习进行人脸识别 源代码 https://hotdog29.com/?p=595 在 2019年7月7日 上张贴 由 hotdog发表回 ...

  7. Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测

    点击查看:Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测 文件大小:80M 操作系统:Windows10旗舰版 开发工具:Python3.8.OpenCV4.5.dlib 开发语言:.py ...

  8. 面部表情识别java_使用Python+OpenCV+dlib为人脸生成口罩

    来源:深度学习与计算机视觉 本文约4800字,建议阅读6分钟本文试图用OpenCV和dlib库来实现这个过程,在这里我们综合生成5种类型的口罩来绘制人脸图像. 本文使用OpenCV dlib库生成口罩 ...

  9. 利用OpenCV、Python和Ubidots构建行人计数器程序(附完整代码)

    作者 | Jose Garcia 译者 | 吴振东 校对 | 张一豪.林亦霖,编辑 | 于腾凯 来源 | 数据派(ID:datapi) 导读:本文将利用OpenCV,Python和Ubidots来编写 ...

  10. python+opencv+dlib实现人脸检测与表情识别

    python+opencv+dlib实现人脸检测与表情识别 一,dlib简单介绍:Dlib包含广泛的机器学习算法.所有的设计都是高度模块化的,快速执行,并且通过一个干净而现代的C ++ API,使用起 ...

最新文章

  1. 看完就能知道渗透测试的技术结构
  2. 为什么 SAP 电商云 Spartacus 产品明细页面的自定义 matcher 会重复被调用
  3. python元类_Python元类
  4. 我的第一次--我与51CTO的故事
  5. 个人打卡签到表html代码,考勤每日签到表模板
  6. Android 代码管理技巧
  7. 新时代火热技术栈:大数据->人工智能(AI)->区块链
  8. jQWidgets API 笔记
  9. 2007世界各国GDP排名
  10. Unity一键发包工具
  11. Android studio中todo的用法
  12. sencha app watch php,使用新的SenchaCmd4命令appwatch
  13. 自然保护区相关矢量数据下载
  14. 15.内置函数,匿名函数
  15. 发送到谷歌邮箱的邮件在哪找_如何让Google表格为您发送个性化电子邮件
  16. 挂载ISO镜像文件作为本地yum源
  17. RFM模型与Spark实现
  18. 一场关于Android的争论
  19. 《圈外课程学习记录》3.2 数据化强力说服
  20. Dubbo高频面试题+解析:dockerinstall未找到命令

热门文章

  1. 服务容错保护Hystrix
  2. django开发_七牛云图片管理
  3. CSMA/CA与CSMA/CD
  4. 凸优化第九章无约束优化 9.4 最速下降方法
  5. [转]Git详解之三 Git分支
  6. 如果想成为数据科学家,请学习这3种语言
  7. 无法使用SQL login去登陆SQL Server - 'Password did not match'
  8. 应用:Xbox 360无线大屏幕控制器“WP 7”
  9. 野村证券分析师称微软不会收购雅虎和RIM
  10. oracle的时间取的到底是谁的时间