【问题标题】:Translating and Rotating an Image in 3D using OpenCV使用 OpenCV 平移和旋转 3D 图像
【发布时间】:2011-10-24 13:36:24
【问题描述】:

给定一个 3 x 3 的旋转矩阵 R 和一个 3 x 1 的平移矩阵 T,我想知道如何将 T 和 R 矩阵与图像相乘?

假设 Iplimage img 为 640 x 480。

我想做的是R*(T*img)

我正在考虑使用 cvGemm,但没有成功。

【问题讨论】:

  • 这个答案对你有帮助吗,如果没有让我知道,我会尽力解释得更好,如果是的话:感谢接受!朱利安

标签: opencv rotation translate-animation


【解决方案1】:

您正在搜索的函数可能是 warpPerspective() :这是一个用例...

// Projection 2D -> 3D matrix
        Mat A1 = (Mat_<double>(4,3) <<
            1, 0, -w/2,
            0, 1, -h/2,
            0, 0,    0,
            0, 0,    1);

// Rotation matrices around the X axis
        Mat R = (Mat_<double>(4, 4) <<
            1,          0,           0, 0,
            0, cos(alpha), -sin(alpha), 0,
            0, sin(alpha),  cos(alpha), 0,
            0,          0,           0, 1);

// Translation matrix on the Z axis 
        Mat T = (Mat_<double>(4, 4) <<
            1, 0, 0, 0,
            0, 1, 0, 0,
            0, 0, 1, dist,
            0, 0, 0, 1);

// Camera Intrisecs matrix 3D -> 2D
        Mat A2 = (Mat_<double>(3,4) <<
            f, 0, w/2, 0,
            0, f, h/2, 0,
            0, 0,   1, 0);

Mat transfo = A2 * (T * (R * A1));

Mat source;
Mat destination;

warpPerspective(source, destination, transfo, source.size(), INTER_CUBIC | WARP_INVERSE_MAP);

希望对你有帮助

朱利安

PS : 我给出的例子是从 2D 到 3D 的投影,但你可以直接使用 transfo = T* R;

【讨论】:

  • 我已经关注了这个链接jepsonsblog.blogspot.in/2012/11/…,但我不知道我需要提供什么输入。我尝试了几个数字,但无法成功。我的意图是沿 y 轴旋转给定的图像。
  • 这里的A1矩阵错了,它需要在第三行再有一个1。选择这个答案:stackoverflow.com/questions/17087446/…
  • 呃,抱歉...我想您的方法可以正常工作,只要您将相机(或图像)从 z=0 移回并进行较大的 z 平移...跨度>
猜你喜欢
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多