code

/*
* File : haedPose.cpp
* Coder:
* Date : 20181126
* Refer: https://www.learnopencv.com/head-pose-estimation-using-opencv-and-dlib/
*/ #include <opencv2/opencv.hpp>
#include <Eigen/Eigen> using namespace std;
using namespace cv; int main(int argc, char **argv)
{ // Read input image
cv::Mat im = cv::imread("headPose.jpg"); // 2D image points. If you change the image, you need to change vector
std::vector<cv::Point2d> image_points;
image_points.push_back( cv::Point2d(, ) ); // Nose tip
image_points.push_back( cv::Point2d(, ) ); // Chin
image_points.push_back( cv::Point2d(, ) ); // Left eye left corner
image_points.push_back( cv::Point2d(, ) ); // Right eye right corner
image_points.push_back( cv::Point2d(, ) ); // Left Mouth corner
image_points.push_back( cv::Point2d(, ) ); // Right mouth corner // 3D model points.
std::vector<cv::Point3d> model_points;
model_points.push_back(cv::Point3d(0.0f, 0.0f, 0.0f)); // Nose tip
model_points.push_back(cv::Point3d(0.0f, -330.0f, -65.0f)); // Chin
model_points.push_back(cv::Point3d(-225.0f, 170.0f, -135.0f)); // Left eye left corner
model_points.push_back(cv::Point3d(225.0f, 170.0f, -135.0f)); // Right eye right corner
model_points.push_back(cv::Point3d(-150.0f, -150.0f, -125.0f)); // Left Mouth corner
model_points.push_back(cv::Point3d(150.0f, -150.0f, -125.0f)); // Right mouth corner // Camera internals
double focal_length = im.cols; // Approximate focal length.
Point2d center = cv::Point2d(im.cols/,im.rows/);
cv::Mat camera_matrix = (cv::Mat_<double>(,) << focal_length, , center.x, , focal_length, center.y, , , );
cv::Mat dist_coeffs = cv::Mat::zeros(,,cv::DataType<double>::type); // Assuming no lens distortion cout << "Camera Matrix " << endl << camera_matrix << endl ;
// Output rotation and translation
cv::Mat rotation_vector; // Rotation in axis-angle form
cv::Mat translation_vector; // Solve for pose
cv::solvePnP(model_points, image_points, camera_matrix, dist_coeffs, rotation_vector, translation_vector); // Project a 3D point (0, 0, 1000.0) onto the image plane.
// We use this to draw a line sticking out of the nose vector<Point3d> nose_end_point3D;
vector<Point2d> nose_end_point2D;
nose_end_point3D.push_back(Point3d(,,1000.0)); projectPoints(nose_end_point3D, rotation_vector, translation_vector, camera_matrix, dist_coeffs, nose_end_point2D); for(int i=; i < image_points.size(); i++)
{
circle(im, image_points[i], , Scalar(,,), -);
} cv::line(im,image_points[], nose_end_point2D[], cv::Scalar(,,), ); cout << "Rotation Vector " << endl << rotation_vector << endl;
cout << "Translation Vector" << endl << translation_vector << endl; cout << nose_end_point2D << endl; //Eigen.
cv::Mat rMatrix = cv::Mat(, , CV_64F);
cv::Rodrigues(rotation_vector, rMatrix);
Eigen::Matrix3d R;
R << rMatrix.at<double>(, ), rMatrix.at<double>(, ), rMatrix.at<double>(, ),
rMatrix.at<double>(, ), rMatrix.at<double>(, ), rMatrix.at<double>(, ),
rMatrix.at<double>(, ), rMatrix.at<double>(, ), rMatrix.at<double>(, );
Eigen::Vector3d eular_radian = R.eulerAngles(, , );//radian.
Eigen::Vector3d eular_angle = R.eulerAngles(, , )*.f/M_PI;//angle.
// Display image.
std::stringstream ss;
ss << eular_angle[];
std::string txt = "Pitch: " + ss.str();
cv::putText(im, txt, cv::Point(, ), 0.5,0.5, cv::Scalar(,,));
std::stringstream ss1;
ss1 << eular_angle[];
std::string txt1 = "Yaw: " + ss1.str();
cv::putText(im, txt1, cv::Point(, ), 0.5,0.5, cv::Scalar(,,));
std::stringstream ss2;
ss2 << eular_angle[];
std::string txt2 = "Roll: " + ss2.str();
cv::putText(im, txt2, cv::Point(, ), 0.5,0.5, cv::Scalar(,,));
cv::imshow("Output", im);
cv::waitKey(); }

参考

1. https://blog.csdn.net/ttomchy/article/details/56859841

2. https://blog.csdn.net/qq_31806429/article/details/78844305

3. https://www.learnopencv.com/head-pose-estimation-using-opencv-and-dlib/

【Eigen开源库】linux系统如何安装使用Eigen库的更多相关文章

  1. Linux系统下安装Gitlab

    Linux系统下安装Gitlab 一.简介 GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与 ...

  2. 在Linux系统下安装大于mysql5.5版本的数据库

    linux下mysql 5.5的安装方法: 1.安装所需要系统库相关库文件      gcc等开发包,在安装linux系统的时候安装. 2.创建mysql安装目录 # mkdir -p /usr/lo ...

  3. 在 Linux 系统中安装Load Generator ,并在windows 调用方法

    在 Linux 系统中安装Load Generator ,并在windows 调用 由于公司需要测试系统的最大用户承受能力,所以需要学习使用loadrunner.在安装的时候碰到了不少问题,所以写下此 ...

  4. Redis学习之一VMWare Pro虚拟机安装和Linux系统的安装

    一.引言 设计模式写完了,相当于重新学了一遍,每次学习都会有不同的感受,对设计模式的理解又加深了,理解的更加透彻了.还差一篇关于设计模式的总结的文章了,写完这篇总结性的文章,设计模式的文章就暂时要告一 ...

  5. Redis进阶实践之一VMWare Pro虚拟机安装和Linux系统的安装(转载)(1)

    Redis进阶实践之一VMWare Pro虚拟机安装和Linux系统的安装 一.引言 设计模式写完了,相当于重新学了一遍,每次学习都会有不同的感受,对设计模式的理解又加深了,理解的更加透彻了.还差一篇 ...

  6. 在Linux系统中安装caffe

    学习深度学习已经很久了,但一直没有自己动手安装过caffe,因为工作需要,需要在linux系统中安装caffe,因此,在这里对安装过程进行记录. caffe配置起来比tensorflow更麻烦一些,我 ...

  7. Redis进阶实践之一VMWare Pro虚拟机安装和Linux系统的安装

    一.引言 设计模式写完了,相当于重新学了一遍,每次学习都会有不同的感受,对设计模式的理解又加深了,理解的更加透彻了.还差一篇关于设计模式的总结的文章了,写完这篇总结性的文章,设计模式的文章就暂时要告一 ...

  8. linux linux系统的安装及使用

    linux  linux系统的安装及使用 一.linux系统中安装vm-tools工具: 步骤: 1.在vmware workstation软件中:虚拟机-安装vmware-tools-状态栏会提示- ...

  9. 2.0 Linux系统的安装之Fedora安装单系统(2)

    2.0 Linux系统的安装之Fedora安装单系统(2) *Linux系统的安装之Fedora安装单系统 恐怕最好装的系统就是Linux系统了,或者与Windows并列.此篇教程为Fedora的单系 ...

随机推荐

  1. Python---字典常用方法总结

    字典是一种key-value的数据类型,字典里必须写Key和value,字典的优点是取数方便和速度快.字典的特性: 1.字典是无序的,因为它没有下标,用key来当索引,所以是无序的 2.字典的key必 ...

  2. IntelliJ IDEA下载及安装,破解

    IntelliJ IDEA下载及安装,破解 百度百科:IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助 ...

  3. 使用机器学习检测TLS 恶意加密流——业界调研***有开源的数据集,包括恶意证书的,以及恶意tls pcap报文***

    2018 年的文章, Using deep neural networks to hunt malicious TLS certificates from:https://techxplore.com ...

  4. UNIX-like系统资源检查命令

    系统资源主要是内存.磁盘.CPU三项,其中任一项资源用尽都会造成系统崩溃. 系统 内存 磁盘空间 磁盘io CPU Linux free -g df -h   top AIX svmon -G/vms ...

  5. ldap+flask+python2实现统一认证里面的那些编码神坑

    首先想吐槽下,直接接手别人的项目,而且是经过四五个人手的项目,是怎么个痛苦.两三套代码django.flask.tornado应有尽有,代码里,掰开手指头就可数的全英文注释,几台服务器没交接清楚,所有 ...

  6. ajax参数传递之[HttpGet]/[HttpPost]/[HttpPut]/[HttpDelete]请求

    $.ajax({ type: "get", url: "http://localhost:27221/api/Charging/GetByModel", con ...

  7. loj6277

    题解: 树状数组模板提 代码: #include<bits/stdc++.h> using namespace std; ; int num[N],n,a[N],l,r,c,opt; vo ...

  8. jsp标签之jsp:setProperty用法

    参考:http://blog.csdn.net/wanghaishanren/article/details/2047400

  9. 【转载】ZooKeeper学习第二期--ZooKeeper安装配置

    原文地址(https://www.cnblogs.com/sunddenly/p/4018459.html) 一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及 ...

  10. Cracking The Coding Interview 9.6

    //原文: // // Given a matrix in which each row and each column is sorted, write a method to find an el ...