gpt4 book ai didi

c++ - 使用 opencv 在 C++ 中将 3d 点从相机空间转换为对象空间

转载 作者:行者123 更新时间:2023-11-28 01:46:41 34 4
gpt4 key购买 nike

在计算机视觉中,当我需要将 cv::mat 从对象(世界)空间坐标转换为相机空间或以相机为中心的坐标时,我使用以下方法代码:(其中rvectvec是相机的旋转和平移 vector )

cv::Mat R; //holds rotation matrix
cv::Rodrigues(rvec, R); // converts a rotation vector to a 3x3 matrix
R = R.t(); // rotation of inverse
tvec2 = -R * tvec; // translation of inverse

给我 tvec2 作为相机空间坐标。

我现在的问题正好相反。我在相机空间中有一组 3d 点,我需要将它们转换为世界空间。上述函数的反函数是什么样的?

谢谢。

最佳答案

我建议您使用 4x4 投影矩阵。实际上,将点从世界坐标系 (WCS) 转换为相机坐标系会更容易。事实上,假设您在 WCS 中有一个点位于 {0,0,0},您的相机位于 {10, 0, 0},Y 轴旋转 45 度。你可以做的就是像那样创建你的投影矩阵

旋转 = 45 度 = 0,785398 弧度。

旋转:(3x3)

enter image description here

翻译:(1x3)

enter image description here

您的投影矩阵将是:(4x4)

enter image description here

使用投影矩阵,假设您在 WCS 中有一个点:

enter image description here

只需将其更改为一个点:

enter image description here

那么您可以做些什么来将其更改为您的 CCS:

PointInCCS = projectionMatrix * PointInWCS;

要在 WCS 中返回,只需使用逆矩阵:

PointInWCS = projectionMatrix.inv() * PointInCCS;

关于c++ - 使用 opencv 在 C++ 中将 3d 点从相机空间转换为对象空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44777035/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com