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

线性模型类的结构如下:

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副特征图像。

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

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;
    }
}

显示结果如下图:

OpenCV 脸部跟踪(3)的更多相关文章

  1. OpenCV 脸部跟踪(1)

        本文中的知识来自于Mastering  opencv with practical computer vision project一书.     本文实施的脸部跟踪算法都是基于数据驱动的,主要 ...

  2. OpenCV 脸部跟踪(2)

          前面一篇文章中提到,我们在一副脸部图像上选取76个特征点,以及这些特征点的连通性信息来描述脸部形状特征,本文中我们会把这些特征点映射到一个标准形状模型.       通常,脸部形状特征点能 ...

  3. python + opencv: kalman 跟踪

    之前博文中讲解过kalman滤波的原理和应用,这里用一个跟踪鼠标的例程来演示怎么在opencv里用自带的kalman函数进行目标跟踪,文章的内容对做图像跟踪有借鉴意义.文章主要是网络资源进行整理和简单 ...

  4. Opencv目标跟踪—CamShift算法

    CamShift算法全称是"Continuously Adaptive Mean-Shift"(连续的自适应MeanShift算法),是对MeanShift算法的改进算法,可以在跟 ...

  5. Opencv人头跟踪检测

    //-------------------------------------人头检测------------------------------------- int main(){     //V ...

  6. opencv视频跟踪2

    在前面的报告中我们实现了用SURF算法计算目标在移动摄像机拍摄到的视频中的位置.由于摄像机本身像素的限制,加之算法处理时间会随着图像质量的提高而提高,实际实验发现在背景复杂的情况下,结果偏差可能会很大 ...

  7. OpenCV人脸特效制作

    https://blog.csdn.net/zxc024000/article/details/50456917 https://blog.csdn.net/huanghuangjin/article ...

  8. OpenCV面、人眼检测

    /* 功能:实现对眼睛.脸部的跟踪. 版本号:1.0 时间:2014-4-27 */ #include <opencv2/objdetect/objdetect.hpp> #include ...

  9. OpenCv 人脸检測的学习

    近期公司要组织开发分享,可是自己还是新手真的不知道分享啥了,然后看了看前段时间研究过OpenCv,那么就分享他把. openCv就不介绍了,说下人脸检測.事实上是通过openCv里边已经训练好的xml ...

随机推荐

  1. 【Ray Tracing The Next Week 超详解】 光线追踪2-4 Perlin noise

     Preface 为了得到更好的纹理,很多人采用各种形式的柏林噪声(该命名来自于发明人 Ken Perlin) 柏林噪声是一种比较模糊的白噪声的东西:(引用书中一张图) 柏林噪声是用来生成一些看似杂乱 ...

  2. 循序渐进学.Net Core Web Api开发系列【0】:序言与目录

    一.序言 我大约在2003年时候开始接触到.NET,最初在.NET framework 1.1版本下写过代码,曾经做过WinForm和ASP.NET开发.大约在2010年的时候转型JAVA环境,这么多 ...

  3. 使用 Python 在 Linux 上实现一键回归测试

    从代码库迁出代码 —- pexpect 的使用 测试人员从代码库(例如 CVS )迁出代码的过程中,需要手动输入访问密码,而 Python 提供了 Pexpect 模块则能够将手动输入密码这一过程自动 ...

  4. HDU 5628 Clarke and math dp+数学

    Clarke and math 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5628 Description Clarke is a patient ...

  5. BZOJ.3522.[POI2014]Hotel(DP)

    题目链接 BZOJ 洛谷 以为裸点分治,但数据范围怎么这么小?快打完了发现不对.. n^2做的话其实是个水题.. 枚举每一个点为根,为了不重复计算,我们要求所求的三个点必须分别位于三棵子树上. 考虑当 ...

  6. UVALive 6893 The Big Painting hash

    The Big Painting 题目连接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=122283#problem/J Descri ...

  7. CentOS 7使用yum安装Docker

    安装依赖 # 配置阿里云源 # 备份 cp /etc/yum.repos.d/CentOS-Base.repo{,.bak'_'`date +%Y%m%d_%H%M%S`} # 下载 wget -O ...

  8. [原创]Linux下网络性能测试Netperf工具介绍及安装

    [原创]Linux下网络性能测试Netperf工具介绍及安装 1 官方网站 http://www.netperf.org/netperf/ 2 Netperf介绍 Netperf是一种网络性能的测试工 ...

  9. Open JTAG Project

    Open JTAG Project is an open source hardware and software for a high speed USB JTAG tool. In this si ...

  10. Golang Vendor 包机制 及 注意事项

    现在的 Go 版本是 1.8,早在 1.5 时期,就有了 Vendor 包机制,详情可查看博文:“理解 Go 1.5 vendor”. 遇到的问题 个人在使用 Glide 管理 Vendor 包时(附 ...