OpenCV 脸部跟踪(3)

简介: 前面一篇文章我们生成了脸部特征的线性形状模型,本章来学习一下显示线性形状的代码。 线性模型类的结构如下: class shape_model     {                         //2d linear shape model     public:...

   前面一篇文章我们生成了脸部特征的线性形状模型,本章来学习一下显示线性形状的代码。

线性模型类的结构如下:

class shape_model
    {                         //2d linear shape model
    public:
        Mat p;                                   //parameter vector (kx1) CV_32F,参数向量
        Mat V;                                   //shape basis (2nxk) CV_32F, line subspace,线性子空间
        Mat e;                                   //parameter variance (kx1) CV_32F 参数方差
        Mat C;                                   //connectivity (cx2) CV_32S 连通性

...

}

我们生成的线性形状模型用矩阵V表示,它是152*18,前四列是旋转缩放矩阵R,接着是保留的14副特征图像。

141134~1[6]

通过下面的代码计算平移和缩放:

float scale = calc_scale(smodel.V.col(0),200);
float tranx = n*150.0/smodel.V.col(2).dot(Mat::ones(2*n,1,CV_32F));
float trany = n*150.0/smodel.V.col(3).dot(Mat::ones(2*n,1,CV_32F));

参数p的计算如下,最后通过draw_shape函数求得生成的模型,并显示出来:

for(int k = 4; k < smodel.V.cols; k++)
{
    for(int j = 0; j < int(val.size()); j++)
    {
        Mat p = Mat::zeros(smodel.V.cols,1,CV_32F);
        p.at<float>(0) = scale;
        p.at<float>(2) = tranx;
        p.at<float>(3) = trany;
        p.at<float>(k) = scale*val[j]*3.0*sqrt(smodel.e.at<float>(k));
        p.copyTo(smodel.p);
        img = Scalar::all(255);
        char str[256];
        sprintf(str,"mode: %d, val: %f sd",k-3,val[j]/3.0);
        draw_string(img,str);
        vector<Point2f> q = smodel.calc_shape();
        draw_shape(img,q,smodel.C); //s = V*p
        imshow("shape model",img);
        if(waitKey(10) == 'q')
            return 0;
    }
}

显示结果如下图:

image

相关文章
|
人工智能 计算机视觉
【人工智能】人脸识别检测戴口罩实战之初识OpenCV简单操作之图像处理,实现脸部打码【第二课】
初识OpenCV简单操作之图像处理,获取人脸特征,给图像简单的打码,绘制图形、运算、几何变换、平滑处理、边缘检测
430 1
【人工智能】人脸识别检测戴口罩实战之初识OpenCV简单操作之图像处理,实现脸部打码【第二课】
|
计算机视觉
opencv,脸部识别,画框,提取,处理
opencv,脸部识别,画框,提取,处理
131 0
opencv,脸部识别,画框,提取,处理
|
计算机视觉
OpenCV 脸部跟踪(2)
前面一篇文章中提到,我们在一副脸部图像上选取76个特征点,以及这些特征点的连通性信息来描述脸部形状特征,本文中我们会把这些特征点映射到一个标准形状模型。       通常,脸部形状特征点能够参数化分解为两个变量,一个是全局的刚体变化,一个是局部的变形。
975 0
|
算法 测试技术 计算机视觉
OpenCV 脸部跟踪(1)
本文中的知识来自于Mastering  opencv with practical computer vision project一书。     本文实施的脸部跟踪算法都是基于数据驱动的,主要包括两个部分,训练和测试。
1163 0
|
1天前
|
计算机视觉
OpenCV图像运动模糊
OpenCV图像运动模糊
5 0
|
1天前
|
计算机视觉
OpenCV图像阈值
OpenCV图像阈值
4 0
|
1天前
|
计算机视觉
OpenCV图像混合
OpenCV图像混合
5 0
|
1天前
|
计算机视觉 Python
OpenCV为图像扩边(填充)
OpenCV为图像扩边(填充)
4 0
|
15天前
|
计算机视觉 Python
轻松掌握opencv的8种图像变换
轻松掌握opencv的8种图像变换