一、PnP求解简介

PnP常用于对合作目标进行位姿估计,其中合作目标上存在相对位置关系已知的标志点,PnP是针对3D-2D映射关系的一种方法,OpenCV中已有PnP求解的实现函数solvePnP,函数声明如下:

CV_EXPORTS_W bool solvePnP( InputArray objectPoints, InputArray imagePoints,InputArray cameraMatrix, InputArray distCoeffs,OutputArray rvec, OutputArray tvec,bool useExtrinsicGuess = false, int flags = SOLVEPNP_ITERATIVE );

其中:

  • flags:求解方法默认采用的是迭代的方法SOLVEPNP_ITERATIVE,另外还有:EPnP,CV_EPNP,UPnP等

  • rvec:rvec的第i列 表示世界坐标系中的第i个坐标轴方向的单位向量在摄像机坐标系里的坐标;

  • tvec:tvec表示世界坐标系的原点在摄像机坐标系的坐标;

二、P4P求解实例

#include <opencv2/opencv.hpp>
#include <math.h>
#include <iostream>
#include <fstream>
using namespace std;
using namespace cv;int main()
{vector<cv::Point2f> Points2D;//初始化相机参数Opencvdouble camD[9] = {600.7, 0,    665.8,0,    798.1,  667.6,0,      0,      1 };cv::Mat camera_matrix = cv::Mat(3, 3, CV_64FC1, camD);//畸变参数double distCoeffD[5] = { -0.189314, 0.444657, 0, 0, -1.57547 };cv::Mat distortion_coefficients = cv::Mat(5, 1, CV_64FC1, distCoeffD);//特征点的像素坐标Points2D.push_back(cv::Point2f(585, 488));  //P1Points2D.push_back(cv::Point2f(581, 590));  //P2Points2D.push_back(cv::Point2f(586, 697));  //P3Points2D.push_back(cv::Point2f(685, 788));  //P4//特征点世界坐标vector<cv::Point3f> Points3D;Points3D.push_back(cv::Point3f(0, 0, 0));       //P1 三维坐标的单位是毫米Points3D.push_back(cv::Point3f(0, 100, 0));     //P2Points3D.push_back(cv::Point3f(100, 0, 0));     //P3Points3D.push_back(cv::Point3f(100, 100, 0));   //P4//初始化输出矩阵cv::Mat rvec = cv::Mat::zeros(3, 1, CV_64FC1);cv::Mat tvec = cv::Mat::zeros(3, 1, CV_64FC1);//三种方法求解//solvePnP(Points3D, Points2D, camera_matrix, distortion_coefficients, rvec, tvec, false, CV_ITERATIVE);    //实测迭代法似乎只能用4个共面特征点求解,5个点或非共面4点解不出正确的解cv::solvePnP(Points3D, Points2D, camera_matrix, distortion_coefficients, rvec, tvec, false, CV_P3P);            //Gao的方法可以使用任意四个特征点,特征点数量不能少于4也不能多于4//solvePnP(Points3D, Points2D, camera_matrix, distortion_coefficients, rvec, tvec, false, CV_EPNP);         //该方法可以用于N点位姿估计;与前两种有偏差//旋转向量变旋转矩阵//提取旋转矩阵double rm[9];cv::Mat rotM(3, 3, CV_64FC1, rm);Rodrigues(rvec, rotM);cout << "use CV_P3P:the rotation matrix is :\n" << rotM << endl;cout << "use CV_P3P:the tran matrix is :\n" << tvec  << endl;return 0;
}

三、OpenCV 官方文档介绍

- solvePnP函数

四、可参考代码

github: SolvePNP

基于PnP的目标位姿求解相关推荐

  1. 基于点特征的各位姿求解算法对比(pose-estimation-compared)

    基于点特征的位姿求解算法: (1)非迭代:P3P . P4P . RPnP (2)迭代:正交迭代(OI)算法 . L-M 算法 . SoftPOSIT 算法 . Tsai算法(初始解不迭代,精确解迭代 ...

  2. 包裹点云位姿估计_【泡泡点云时空】基于点云监督学习的6D目标位姿回归

    相比色彩信息, 深度信息更易于进行物体的位姿估计: 提出了第一个直接使用无序点集作为输入的位姿估计深度学习框架: 提出的方法在 YCB-video 数据集上超越了最新方法: 旋转表示.模型设计.损失函 ...

  3. 【单目标优化求解】基于matlab增强型黑猩猩优化器算法求解单目标优化问题【含Matlab源码 2013期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab增强型黑猩猩优化器算法求解单目标优化问题[含Matlab源码 2013期] 点击上面蓝色字体,直接付费下 ...

  4. 【单目标优化求解】基于matlab黑猩猩算法求解单目标问题【含Matlab源码 1413期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab黑猩猩算法求解单目标问题[含Matlab源码 1413期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...

  5. 【智能优化算法】基于矮猫鼬优化算法求解单目标优化问题附matlab代码

    1 简介 基于矮猫鼬优化算法求解单目标优化问题​ 2 部分代码 %___________________________________________________________________ ...

  6. 【多目标优化求解】基于matlab粘菌算法MOSMA求解多目标优化问题【含Matlab源码 2279期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[多目标优化求解]基于matlab粘菌算法MOSMA求解多目标优化问题[含Matlab源码 2279期] 点击上面蓝色字体,直接付费下载, ...

  7. 基于图像的三维重建——P3P求解相机位姿(5)

    文章目录 P3P简介 直接线性变换法 Kneip算法 算法原理及流程 基于RANSAC的Kneip算法 P3P简介 相机位姿求解是SFM中必要的一步,而P3P问题的目的就是通过三维点(3对)对应关系确 ...

  8. 【多目标优化求解】基于matlab灰狼优化算法求解多目标优化问题 【含Matlab源码 007期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[多目标优化求解]基于matlab灰狼优化算法求解多目标优化问题 [含Matlab源码 007期] 获取代码方式2: 通过订阅紫极神光博客 ...

  9. 【多目标优化求解】基于matlab飞蛾扑火算法 (NSMFO)求解多目标优化问题 【含Matlab源码 2312期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[多目标优化求解]基于matlab飞蛾扑火算法 (NSMFO)求解多目标优化问题 [含Matlab源码 2312期] 点击上面蓝色字体,直 ...

最新文章

  1. MySQL的btree索引和hash索引的区别
  2. PHP设计模式之装饰模式(Decorator)
  3. Android动画(一)-视图动画与帧动画
  4. Asp.NET Core 一个接口的多个实现如何通过 DI 注册?
  5. 输入参数的数目不足 matlab_哈工大被禁用MATLAB,工科学生慌了,论文至上间接导致软件依赖?...
  6. python实战演练_《Python高效开发实战》实战演练——
  7. springboot+jsp+mybatis项目实例(后台成功,但是无法跳转jsp页面,没有实体类的注解,看springboot+jsp第二弹相关配置,即可成功配置jsp)...
  8. php file get contents 空,file_get_contents()函数为空
  9. vc 2010 下打包dll 的问题
  10. amend用法 git 信息_Git 高级用法,你用过哪些了
  11. 【多线程】创建多少线程才是合适的
  12. linux 编译安装libpng,交叉编译libpng以及zlib开源库
  13. excel power bi 常用函数
  14. 软件质量管理体系 type:pdf_广河iso14001环境管理体系各种荣誉资质 - 广河商业服务...
  15. windows打包ios app
  16. linux更新opengl驱动下载,支持OpenGL 3.2 NVIDIA全新Linux驱动发布
  17. 抽象类和接口的异同点
  18. nginx服务器的建立
  19. Browser 浏览器内核
  20. L1-057~L1063 (PTA使我精神焕发、6翻了、敲笨钟、心理阴影面积、新胖子公式、幸运彩票、吃鱼还是吃肉)

热门文章

  1. java 小鸡_小鸡快跳java
  2. Java代码去除空格的几种方法
  3. java 递归函数_Java递归函数.....
  4. 洛谷 4828 Nagisa loves Tomoya 题解
  5. java 银行利息_java银行利息
  6. 服务器上很多iOS临时文件,iOS临时文件夹位置
  7. Linus 回应“拉黑”事件:触犯禁忌,违背信任!
  8. 网络安全 虚拟化架构与系统部署
  9. Jetson nano 上使用ROS进行双目摄像头(CSI-IMX219)操作标定
  10. 油猴子脚本 - 我的地盘我做主