博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用opencv的aruco库进行位姿估计(得到的是旋转矩阵与平移矩阵)
阅读量:4083 次
发布时间:2019-05-25

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

这里面很重要的一点就是说了:使用estimatePoseSingleMarkers估计Marker的位姿,得到的即是即是R和t,R和t应该就是旋转矩阵与平移矩阵。

转载自:

使用opencv的aruco库进行位姿估计

2019-01-11 15:02:27 5143

分类专栏: 文章标签:

最后发布:2019-01-11 15:02:27首次发布:2019-01-11 15:02:27

版权声明:本文为博主原创文章,遵循版权协议,转载请附上原文出处链接和本声明。

本文链接:

版权

1、姿态估计在许多计算机视觉应用中非常重要:机器人导航,增强现实等等。该过程基于查找真实环境中的点与其2D图像投影之间的对应关系。这通常是一个困难的步骤,因此通常使用合成或基准标记使其更容易。

最流行的方法之一是使用二元方形基准标记。这些标记的主要好处是单个标记提供足够的对应(其四个角)以获得相机姿势。此外,内部二进制编码使它们特别健壮,允许应用错误检测和校正技术的可能性。

aruco功能包括在:

#include < opencv2 / aruco.hpp >

aruco模块基于ArUco库,这是一个用于检测由RafaelMuñoz和Sergio Garrido开发的方形基准标记的流行库:

因为aruco是在opencv_contrib中,所以读者在安装时,要注意是否安装了opencv_contrib,笔者安装过程在前面的博客已经写出:

https://blog.csdn.net/weixin_43053387/article/details/85806344

环境搭建都没有问题,下面我们根据官方文档,进行相关调用就行了,先给出网址:

https://docs.opencv.org/master/d5/dae/tutorial_aruco_detection.html

界面是这样的:

在这里插入图片描述
笔者就是根据这个一步一步调用,得到我们的旋转矩阵与平移矩阵,下面给出小编在qt下编译的代码:
程序大体步骤:
1、使用getPredefinedDictionary创建一个字典
2、读取每一帧,使用detectMarkers检测当前帧中的Markers
3、使用estimatePoseSingleMarkers估计Marker的位姿,得到的即是即是R和t

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace cv;using namespace std;int main(int argc, char *argv[]){//内参与畸变矩阵,笔者在前面的博客已经给出求解方法,有需要的可以找找看看 double fx,fy,cx,cy,k1,k2,k3,p1,p2; fx=955.8925; fy=955.4439; cx=296.9006; cy=215.9074; k1=-0.1523; k2=0.7722; k3=0; p1=0; p2=0; Mat cameraMatrix = (cv::Mat_
(3, 3) << fx, 0.0, cx, 0.0, fy, cy, 0.0, 0.0, 1.0); Mat distCoeffs = (cv::Mat_
(5, 1) << k1, k2, p1, p2, k3); cv::VideoCapture inputVideo; inputVideo.open(0); cv::Ptr
dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250); while (inputVideo.grab()) { cv::Mat image, imageCopy; inputVideo.retrieve(image);//抓取视频中的一张照片 image.copyTo(imageCopy); std::vector
ids; std::vector
> corners; cv::aruco::detectMarkers(image, dictionary, corners, ids);//检测靶标 // if at least one marker detected if (ids.size() > 0) { cv::aruco::drawDetectedMarkers(imageCopy, corners, ids);//绘制检测到的靶标的框 std::vector
rvecs, tvecs; cv::aruco::estimatePoseSingleMarkers(corners, 0.055, cameraMatrix, distCoeffs, rvecs, tvecs);//求解旋转矩阵rvecs和平移矩阵tvecs //cout<<"R :"<
<

运行对着你指定的靶标就可以出结果啦。

你可能感兴趣的文章
进阶vue全家桶
查看>>
调起地图App实现路径规划导航等
查看>>
一步一步学习 ReactNative + Redux(2)
查看>>
一步一步学习 ReactNative + Redux(3)
查看>>
一步一步学习 ReactNative + Redux(3.1:bug修复)
查看>>
一步一步学习 ReactNative + Redux(3.2:优化,消除魔术字段)
查看>>
一步一步学习 ReactNative + Redux(4:中间件)
查看>>
一步一步学习 ReactNative + Redux(5:异步Action)
查看>>
一步一步学习 ReactNative + Redux(6)
查看>>
react-redux中的connect方法解析
查看>>
使用原生redux模块在React组件之间实现数据共享小实例
查看>>
利用react-redux实现react组件数据之间数据共享
查看>>
ES7的Async/Await 异步
查看>>
快速理解和使用 ES7 await/async
查看>>
基于最新版本React Native实现JsBundle预加载,界面秒开优化
查看>>
一个基于 React Native 的 Android 企业级应用。
查看>>
Android项目代码
查看>>
react-router跳转传值
查看>>
【React 模仿大众点评 webapp】实战教程 - 文档目录总结
查看>>
Redux实例学习 - Redux套用七步骤
查看>>