我是靠谱客的博主 鳗鱼饼干,最近开发中收集的这篇文章主要介绍estimateWorldCameraPose & cameraPoseToExtrinsics(matlab)与solvepnp(opencv)区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

opencv以python下的opencv3.4.2为例(ps.opencv高版本部分函数要收费使用,俺就降低版本了)

前言

位姿估计任务当中,pnp方法是一项重要且经典的位姿估计方法,可以通过寻找二维图像和三维世界点对来结算相机位姿。

鄙人曾经用过matlab和opencv的pnp,发现两个版本下的pnp方法有细微不同(这个不同也折磨了鄙人很久!!!),当时没有在csdn中找到介绍相关问题的帖子,特此分享给大家。

先上链接:
个人感觉这个说的不错,github issues讨论
matlab estimateWorldCameraPose函数
matlab cameraPoseToExtrinsics函数
opencv solvepnp和solvepnpRansac

正文

matlab和opencv(以python为例)区别一:

matlab结果按行存储,opencv的结果按列存储,所以,相同的矩阵,matlab结果,其旋转矩阵需要进行转置才能转化为opencv的结果(平移矩阵不需要转置)。

matlab和opencv(以python为例)区别二:

matlab计算的结果,是在原始坐标系绕z旋转180°后再进行旋转平移的,所以matlab旋转矩阵在进行转置后需要前两行取反(即再绕z轴旋转180°),相应的平移向量前两个元素也要取反。

matlab和opencv(以python为例)区别三:

因为前面的区别,导致相机和世界坐标系rt矩阵求取方法也不同
matlab 的 estimateWorldCameraPose函数和opencv的solvepnp函数得到的结果都是m2c矩阵,即世界坐标系下的坐标系左乘该矩阵的标准形式得到该点在相机坐标系下的坐标。
若想得到c2m矩阵,opencv下

c2m_ROpencv = r.T
c2m_TOpencv = np.dot(-r.T,t)

c2m_RMatlab = r.T
c2m_TMatlab = np.dot(-t,r.T)

注:.T是转置操作,np.dot是矩阵相乘

最后

以上就是鳗鱼饼干为你收集整理的estimateWorldCameraPose & cameraPoseToExtrinsics(matlab)与solvepnp(opencv)区别的全部内容,希望文章能够帮你解决estimateWorldCameraPose & cameraPoseToExtrinsics(matlab)与solvepnp(opencv)区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部