原文:https://blog.csdn.net/qq_41685265/article/details/104155731
下面函数实现了通过两组点计算本质矩阵进而得到图片之间的转换关系:R(旋转矩阵)和T(平移矩阵)

void pose_estimation_2d2d (std::vector<KeyPoint> keypoints_1,std::vector<KeyPoint> keypoints_2,std::vector< DMatch > matches,Mat& R, Mat& t )
{// 相机内参, TUM Freiburg2Mat K = ( Mat_<double> ( 3,3 ) << 520.9, 0, 325.1, 0, 521.0, 249.7, 0, 0, 1 );//-- 把匹配点转换为 vector<Point2f> 的形式vector<Point2f> points1;vector<Point2f> points2;for ( int i = 0; i < ( int ) matches.size(); i++ ){points1.push_back( keypoints_1[matches[i].queryIdx].pt );points2.push_back( keypoints_2[matches[i].trainIdx].pt );}//-- 计算基础矩阵Mat fundamental_matrix;fundamental_matrix = findFundamentalMat ( points1, points2, CV_FM_8POINT );cout<<"fundamental_matrix is "<<endl<< fundamental_matrix<<endl;//-- 计算本质矩阵Point2d principal_point ( 325.1, 249.7 ); // 光心, TUM dataset 标定值int focal_length = 521; // 焦距, TUM dataset 标定值Mat essential_matrix;essential_matrix = findEssentialMat ( points1, points2, focal_length, principal_point, RANSAC );cout<<"essential_matrix is "<<endl<< essential_matrix<<endl;//-- 计算单应矩阵Mat homography_matrix;homography_matrix = findHomography ( points1, points2, RANSAC, 3, noArray(), 2000, 0.99 );cout<<"homography_matrix is "<<endl<<homography_matrix<<endl;//-- 从本质矩阵中恢复旋转和平移信息.recoverPose ( essential_matrix, points1, points2, R, t, focal_length, principal_point );cout<<"R is "<<endl<<R<<endl;cout<<"t is "<<endl<<t<<endl;
}

下面是主函数,得到两组点,并且调用上面的函数计算两组点之间的本质矩阵和求解转换关系,最后验证结果

int main( int argc, char** argv )
{if ( argc != 3 ){cout<<"usage: feature_extraction img1 img2"<<endl;return 1;}//-- 读取图像Mat img_1 = imread ( argv[1], CV_LOAD_IMAGE_COLOR );Mat img_2 = imread ( argv[2], CV_LOAD_IMAGE_COLOR );vector<KeyPoint> keypoints_1, keypoints_2;vector<DMatch> matches;find_feature_matches( img_1, img_2, keypoints_1, keypoints_2, matches );cout<<"一共找到了"<<matches.size()<<"组匹配点"<<endl;//-- 估计两张图像间运动Mat R,t;pose_estimation_2d2d( keypoints_1, keypoints_2, matches, R, t );//-- 验证 E=t^R*scaleMat t_x = (Mat_<double>(3,3) <<0, -t.at<double>(2,0), t.at<double>(1,0),t.at<double>(2,0), 0, -t.at<double>(0,0),-t.at<double>(1.0), t.at<double>(0,0), 0);cout<<"t^R="<<endl<<t_x*R<<endl;//-- 验证对极约束Mat K = ( Mat_<double> ( 3,3 ) << 520.9, 0, 325.1, 0, 521.0, 249.7, 0, 0, 1 );for ( DMatch m: matches ){Point2d pt1 = pixel2cam( keypoints_1[ m.queryIdx ].pt, K );Mat y1 = (Mat_<double>(3,1) << pt1.x, pt1.y, 1);Point2d pt2 = pixel2cam( keypoints_2[ m.trainIdx ].pt, K );Mat y2 = (Mat_<double>(3,1) << pt2.x, pt2.y, 1);Mat d = y2.t() * t_x * R * y1;cout << "epipolar constraint = " << d << endl;}return 0;
}

结果:

OPENCV计算图片间转换关系相关推荐

  1. 双目视觉(一)-相机标定及各坐标系间转换关系

    本篇文章用来记录近期学习双目视觉定位的收获,后续我将随着不断深入学习对文章进行补充 视觉是人类感知外界环境信息的重要途径,其中人类约有80%的环境信息是通过双眼获取的.双目视觉系统是典型的类人视觉模型 ...

  2. python+opencv 计算图片的感知hash值,来计算汉明距离,简单的找相似图片

    感知哈希算法是一类算法的总称,包括aHash.pHash.dHash.顾名思义,感知哈希不是以严格的方式计算Hash值,而是以更加相对的方式计算哈希值,因为"相似"与否,就是一种相 ...

  3. 【opencv】图片文件格式转换(以jpg,png为例)

    import cv2img = cv2.imread("xxx.jpg") cv2.imwrite("xxx.png", img)

  4. python图片相似度计算_python Opencv计算图像相似度过程解析

    这篇文章主要介绍了python Opencv计算图像相似度过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.相关概念 一般我们人区分谁是谁 ...

  5. 通过两个坐标系对应点计算转换关系

    通过两个坐标系对应点计算转换关系 应用 三维重建方法通常会自己估计相机的 R,T R,T矩阵,这些矩阵定义了一个世界坐标系,在使用客观的评估方法如Middlebury来评估精度时,需要使用评估方法提供 ...

  6. 效用分析 ( 效能分析、Power analysis)是什么?效用分析在线计算器介绍(分析样本量、效用和效应量之间的关系时,需要把其中一个因素固定,计算另外两个因素间的关系、或者给定两个因素计算第三个

    效用分析 ( 效能分析.Power analysis)是什么?效用分析在线计算器介绍(分析样本量.效用和效应量之间的关系时,需要把其中一个因素固定,计算另外两个因素间的关系.或者给定两个因素计算第三个 ...

  7. 计算图片相似度的方法

    文章目录 1.余弦相似度计算 2.哈希算法计算图片的相似度 3.直方图计算图片的相似度 4.SSIM(结构相似度度量)计算图片的相似度 5.基于互信息(Mutual Information)计算图片的 ...

  8. 通过opencv在图片上加上文字_基于Ubuntu16

    本文主要介绍,如何通过**C++**语言在Ubuntu操作系统下的OpenCV中将一个图片叠加上文字 通过opencv在图片上叠加上文字 一.汉字点阵字库原理 1.汉字的三种编码 1.1区位码 1.2 ...

  9. 基于Ubuntu系统,调用opencv在图片上显示数字和汉字

    文章目录 一.汉字编码的介绍 1.汉字编码的发展过程 (1)汉字编码产生的原因 (2)常用的汉字编码 2.区位码 (1)产生原因 (2)概念简述 (3)区域分布情况 3.机内码 (1)基本概念 (2) ...

最新文章

  1. Cs Tip13: 删除安装文件
  2. shell经典脚本或命令行
  3. python列表遍历 空列表_Python list列表执行reversed()后执行pop()返回迭代对象遍历为空问题...
  4. oracle fileline换行,Java中的换行符line.separator及file的separator
  5. MySQL Spatial Data Types
  6. arcgis 服务网页打开需要输入用户名和密码问题解决
  7. 了解计算机中的信息编码教案,《信息编码》教学设计
  8. 用Caffe搭建自己的网络,并用图片进行测试
  9. 教你如何去掉桌面图标的蓝底
  10. ZohoCRM客户管理系统应用的案例分享
  11. 微信公众号嵌套html,VUE项目嵌入微信公众号文章URL
  12. Dying In The Sun~~逝去于阳光之下
  13. 手机端网页设计尺寸,手机端网页设计图片尺寸
  14. PS简单操作快捷键,上手快
  15. Jetson TX2 刷机中遇到的奇葩大坑
  16. 别具一格的Flash时钟
  17. 【算法与数据结构】—— 动态规划之背包问题
  18. 等价无穷小的精度问题
  19. 加入雷锋网,与智能未来同行
  20. 我拍,我再拍,我拍拍拍

热门文章

  1. Project Euler 50 Consecutive prime sum
  2. 高项第一次考试顺利通过后的感想
  3. JavaMail邮件别名和主题乱码解决[转]
  4. Windows程序设计_13_伤不起的书
  5. 基于Springboot实现共享自习室管理系统
  6. python求解方程组
  7. excel 怎么让数字不用科学计数法
  8. asp.net core 2使用本地https证书
  9. servlet 校验密码
  10. Ubuntu16.04 下python2 | python3