博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV 脸部跟踪(3)
阅读量:7169 次
发布时间:2019-06-29

本文共 1192 字,大约阅读时间需要 3 分钟。

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

线性模型类的结构如下:

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

显示结果如下图:

转载于:https://www.cnblogs.com/mikewolf2002/p/3673993.html

你可能感兴趣的文章
1、JUC--volatile 关键字-内存可见性
查看>>
LeetCode: Minimum Depth of Binary Tree
查看>>
可运行的代码
查看>>
Oracle数据库添加新字段后加载页面报错 java.lang.IllegalArgumentException
查看>>
CSU 1505: 酷酷的单词【字符串】
查看>>
198. 打家劫舍
查看>>
错误之处(二)
查看>>
解决insert语句插入时,需要写列值的问题
查看>>
CSS选择器 < ~ +
查看>>
Opengl_es模型矩阵位置:glFrustumx与glTranslatef参数的相互影响--立方体旋转特效
查看>>
JS小功能系列8省市联动
查看>>
《程序是怎样跑起来的》第八章读后感
查看>>
YCD 软件更新方法
查看>>
CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (四)问题汇总
查看>>
mybatis中的#和$的区别
查看>>
synchronized 解决死锁的问题 轉貼
查看>>
poj2524(并查集)买一送一hdu1213
查看>>
ADO.NET详解----核心对象的使用
查看>>
ICM Technex 2018 and Codeforces Round #463 (Div. 1 + Div. 2, combined)
查看>>
如何让linux定时任务crontab按秒执行
查看>>