Translating and Rotating an Image in 3D using OpenCV

前端 未结 1 1127
太阳男子
太阳男子 2021-02-10 06:15

Given a 3 x 3 rotation matrix,R, and a 3 x 1 translation matrix,T, I am wondering how to multiply the T and R matrices to an image?

Lets say the Iplimage img is 640 x 48

1条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-02-10 06:48

    The function you are searching for is probably warpPerspective() : this is a use case...

    // Projection 2D -> 3D matrix
            Mat A1 = (Mat_(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_(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_(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_(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);
    

    I hope it could help you,

    Julien

    PS : I gave the example with a projection from 2D to 3D but you can use directly transfo = T* R;

    0 讨论(0)
提交回复
热议问题