2011-08-11 14 views
3

3x3 회전 행렬 R 및 3x1 변환 행렬 T가 주어지면 T 및 R 행렬을 이미지에 곱하는 방법이 궁금합니다.OpenCV를 사용하여 3D로 이미지 번역 및 회전

는 Iplimage의 IMG가 R*(T*img) 내가하고 싶은 640 X 480

라고 할 수 있습니다.

나는 cvGemm을 사용하려고 생각했지만 작동하지 않았다.

+2

답변이 도움이되는지 알려 주시지 않겠습니까? 그렇다면 더 설명하려고 노력하겠습니다. 수락 감사합니다! Julien – jmartel

답변

4

당신이 검색 기능은 아마 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;

+0

나는이 링크를 따라 갔다. http://jepsonsblog.blogspot.in/2012/11/rotation-in-3d-using-opencvs.html하지만 나는 어떤 입력을해야하는지 알지 못한다. 나는 소수의 숫자로 시도했지만 성공할 수 없었다. 제 의도는 y 축을 따라 주어진 이미지를 회전시키는 것입니다. – 2vision2

+1

A1 행렬이 잘못되었습니다. 세 번째 행에 또 다른 1이 있어야합니다. 이 답변은 다음과 같습니다. https://stackoverflow.com/questions/17087446/how-to-calculate-perspective-transform-for-opencv-from-rotation-angles –

+0

어, 죄송합니다 ... 내 방식대로 z + 0에서 큰 z- 변환으로 카메라 (또는 이미지)를 다시 움직이는 한 ... –

관련 문제