opencv c++ 使用 decomposeProjectionMatrix提取旋转向量 的实例
时间: 2024-09-15 14:05:45 浏览: 82
opencv3/C++ 使用Tracker实现简单目标跟踪
在OpenCV库中,`decomposeProjectionMatrix()` 函数是一个用于从单视图投影矩阵中分解出相机内部旋转和平移变换的重要工具。它主要用于计算机视觉中的结构光或者立体匹配等场景。这个函数接受一个4x4的齐次坐标投影矩阵作为输入,并返回一个旋转(R)、平移(T)和缩放(S)矩阵。
以下是一个简单的C++代码示例,演示如何使用`decomposeProjectionMatrix`:
```cpp
#include <opencv2/opencv.hpp>
cv::Mat projectionMatrix; // 假设你已经有了计算好的投影矩阵
// 首先,将4x4的投影矩阵转换为3x4形式
projectionMatrix.convertTo(projMat, CV_64F, 1.0 / projMat.at<double>(3, 3));
// 使用decomposeProjectionMatrix分解
std::vector<cv::Mat> decomposed;
cv::decomposeProjectionMatrix(projMat, decomposed);
cv::Mat R, T, S; // 分别存储旋转、平移和尺度信息
R = decomposed[0]; // 第0个元素通常是旋转矩阵
T = decomposed[1].col(3); // 第1个元素的第一列是平移向量
S = (1.0 / decomposed[2][0]); // 第2个元素的第一个元素通常用于缩放,这里取其倒数得到实际尺度
// 现在你可以对R、T和S进行进一步处理
```
阅读全文