Перевод и вращение изображения в 3D с использованием OpenCV - PullRequest
3 голосов
/ 11 августа 2011

Учитывая матрицу вращения 3 x 3, R, и матрицу перевода 3 x 1, T, мне интересно, как умножить матрицы T и R на изображение?

Допустим, Iplimage img640 x 480.

Я хочу сделать R*(T*img).

Я думал об использовании cvGemm, но это не сработало.

1 Ответ

4 голосов
/ 11 августа 2011

Функция, которую вы ищете, вероятно, 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);

Я надеюсь, что это может помочь вам,

Julien

PS: я привел пример с проекцией из 2D в 3D, но вы можете напрямую использовать transfo = T * R;

...