cv2最强仿射变换(支持n点对齐,可进行人脸对齐)
人脸识别过程中,人脸对齐往往是最重要的一步,对齐的结果往往影响之后提取人脸特征的准确率,opencv内置的仿射变换仅仅需要三个点,而需对齐的人脸关键点一般是5个、68个、128个,本文提供一种n点对齐的放射变换点,以5个关键点的对齐为例:
归一化的五点坐标为:
[(0.31556875000000000, 0.4615741071428571),(0.68262291666666670, 0.4615741071428571),(0.50026249999999990, 0.6405053571428571),(0.34947187500000004, 0.8246919642857142),(0.65343645833333330, 0.8246919642857142)]
假如要裁剪的face大小为(112, 96),即:(height, width),则face的最终location点为:(xwidth, yheight)
[(30.2946, 51.6963),(65.5318, 51.6963),(48.0252, 71.7366),(33.5493, 92.3655),(62.7299, 92.3655)]
代码参考来源:https://matthewearl.github.io/2015/07/28/switching-eds-with-python/
#coding=utf-8
import os,cv2,numpy
import logging
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(levelname)s: %(message)s',datefmt='%Y-%m-%d %H:%M:%S'
)
logger = logging.getLogger(__name__)imgSize = [112, 96];
coord5point = [[30.2946, 51.6963],[65.5318, 51.6963],[48.0252, 71.7366],[33.5493, 92.3655],[62.7299, 92.3655]]face_landmarks = [[259, 137],[319, 150],[284, 177],[253, 206],[297, 216]]def transformation_from_points(points1, points2):points1 = points1.astype(numpy.float64)points2 = points2.astype(numpy.float64)c1 = numpy.mean(points1, axis=0)c2 = numpy.mean(points2, axis=0)points1 -= c1points2 -= c2s1 = numpy.std(points1)s2 = numpy.std(points2)points1 /= s1points2 /= s2U, S, Vt = numpy.linalg.svd(points1.T * points2)R = (U * Vt).Treturn numpy.vstack([numpy.hstack(((s2 / s1) * R,c2.T - (s2 / s1) * R * c1.T)),numpy.matrix([0., 0., 1.])])def warp_im(img_im, orgi_landmarks,tar_landmarks):pts1 = numpy.float64(numpy.matrix([[point[0], point[1]] for point in orgi_landmarks]))pts2 = numpy.float64(numpy.matrix([[point[0], point[1]] for point in tar_landmarks]))M = transformation_from_points(pts1, pts2)dst = cv2.warpAffine(img_im, M[:2], (img_im.shape[1], img_im.shape[0]))return dstdef main():pic_path = r'D:\20171117190537959.jpg'img_im = cv2.imread(pic_path)cv2.imshow('affine_img_im', img_im)dst = warp_im(img_im, face_landmarks, coord5point)cv2.imshow('affine', dst)crop_im = dst[0:imgSize[0], 0:imgSize[1]]cv2.imshow('affine_crop_im', crop_im)if __name__=='__main__':main()cv2.waitKey()pass
cv2最强仿射变换(支持n点对齐,可进行人脸对齐)相关推荐
- 人脸对齐之SDM / 人脸对齐之LBF / 人脸实时替换
人脸对齐之SDM(Supervised Descent Method) 人脸对齐之LBF(Local Binary Features) 人脸识别技术大总结(1):Face Detection & ...
- 【人脸对齐-Landmarks】人脸对齐算法常用评价标准
1 the inter-ocular distance normalized error 其中 xix_ixi 表示预测坐标点,表示ground-truth,dIODd_{IOD}dIOD 表示两 ...
- Openface(二):实现人脸对齐
最近学习了开源代码Openface,实现了LFW数据集的人脸对齐.这些人脸对齐的图片是后续深度学习神经网络的训练数据集. 代码除了引用常见的python包,还引用了两个本地包:一个是dataset,用 ...
- 人脸对齐(二十)--PRN
Joint3D Face Reconstruction and Dense Alignment with Position Map Regression(PRN2018) 我们从之前的论文可以看出,基 ...
- coreldraw 导入面料_CDR真强!支持导入的文件格式这么多
原标题:CDR真强!支持导入的文件格式这么多 CorelDRAW作为世界一流的平面矢量绘图软件,被专业设计人员广泛使用,作为强大的图形设计工具包含对超过 100 种常用文件格式的广泛文件兼容性支持,它 ...
- 通用网络验证系统,承载能力强,支持高并发、高承载、多线路
这个网络验证系统基于Php+MySql数据库架构的网络验证系统,安全稳定.性能强悍. 承载能力强,支持高并发.高承载.多线路,支持服务器集群架设,高性能设计,速度非常快,效率非常高. 客户端支持VC. ...
- opencv中mean函数耗时_使用OpenCV进行人脸对齐
在人脸识别项目中,如果图片中人脸的方向各不一样且相差很大,这样会影响人脸识别的准确率.所以在实际人脸检测项目中,在人脸识别的前一步往往会先进行人脸对齐.人脸对齐可以看作是数据normalization ...
- 人脸系列:人脸检测、人脸关键点定位、人脸优选、人脸对齐、人脸特征提取、人脸跟踪、人脸活体检测
一.一点想法 缘由:最近想整理下从事人脸方向的所有查阅过的论文,做过的相关实验,因为随着时间的推移,自己总会遗忘当初的一些想法,所以想好好整理下自己的学习笔记. 过程:本系列包括从人脸检测.人脸关键点 ...
- dlib人脸对齐(python)
1 68 和 51 关键点 2 人脸对齐 a 定位图片中的人脸 b 提取人脸区域的图片并保存 c 人脸对齐操作并保存 3 代码 import dlib import face_recognition ...
最新文章
- ireport如何给static text加边框_html amp;amp; css 解决li浮动边框为2的问题
- 算法基础知识科普:8大搜索算法之红黑树(中)
- (原)Apache添加完限速模块后的文件
- JavaScript/VBScript脚本程序调试(Wscript篇)
- 函数_方法_的四种调用方式
- 2019年9月中国编程语言排行榜,C#排第三
- 安装telnet_Flask干货:Memcached缓存系统——Memcached的安装
- 深入理解JavaScript系列:This? Yes,this!
- [翻译]超炫列表动画的实现
- Idea修改字体颜色
- mysql单表大小限制
- DVWA 黑客攻防演练(十二) DOM型 XSS 攻击 DOM Based Cross Site Scripting
- 解决 fatal: unable to access xxx: Encountered end of
- 你还在使用xshell绿色破解版?
- Java的日期类说明Calendar、Data、日期转化格式化以及注意事项
- 【资源帖】深度学习视觉领域常用数据集汇总
- [转载]2012 年 4 月,水王排行榜
- PADS-VX入门到精通实战项目讲解(上)—LOGIC部分-覃小刚-专题视频课程
- Ceilometer原理及介绍
- HashMap和Iterator迭代器的小用法