我是靠谱客的博主 烂漫猫咪,最近开发中收集的这篇文章主要介绍利用opencv+flandmark 进行face detection, face alignment and crop,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

平时看论文的过程中发现,用来做测试的人脸需要进行face alignment + crop,这样处理后的准确率通常比之前的准确率要高。本文的工作便是对人脸数据做这样的预处理:
这里写图片描述
具体步骤
本文主要利用opencv自带的haar分类器进行检测到bounding box后,再通过flandmark检测人眼。flandmark是一个检测脸部特征点的开源代码库
(http://cmp.felk.cvut.cz/~uricamic/flandmark/), 利用flandmark可以检测到左右眼睛的左右角点、鼻子、嘴的左右角点,位置如下:
/*
* 5 1 2 6
*
* 0/7
*
* 3 4
*
*/
检测效果如下:
这里写图片描述
根据上述眼部特征点计算每只眼睛的中心点并进行连线,计算与水平线之间的夹角,根据这个角度对图片进行仿射变换,如下图:
这里写图片描述
由此可以得到水平对齐后的图片,此时再进行人脸的剪切,就完成了face alignment和face crop。
代码实现

#include "flandmark_detector.h"
#include "opencv2highgui.hpp"
#include "opencv2imgproc.hpp"
#include "cv.h"
#include "highgui.h"
#include "FileHelper.h" //the file that contains the functions on file operation
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace cv;
using namespace std;


int detectFaceInImage(IplImage* orig, IplImage* input, CvHaarClassifierCascade* cascade, 
    FLANDMARK_Model *model, int *bbox, double *landmarks);
void FaceAlign(const Mat &orig, double *landmarks, Mat& outputarray);
void cropAlignedFace(Mat *input, CvHaarClassifierCascade* cascade, string saveAddr);

int main(int argc, char** argv)
{
    // Haar Cascade file, used for Face Detection.
    const char faceCascadeFilename[] = "haarcascade_frontalface_alt.xml";
    // ***face detection ***//
    CvHaarClassifierCascade* faceCascade;
    faceCascade = (CvHaarClassifierCascade*)cvLoad(faceCascadeFilename);
    if (!faceCascade)
    {
        printf("Couldnt load Face detector '%s'n", faceCascadeFilename);
        exit(1);
    }
    // begin flandmark load model
    FLANDMARK_Model * model = flandmark_init(

最后

以上就是烂漫猫咪为你收集整理的利用opencv+flandmark 进行face detection, face alignment and crop的全部内容,希望文章能够帮你解决利用opencv+flandmark 进行face detection, face alignment and crop所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部