2011-11-17 5 views
0

에서 나는 현재 라인 89 warpPerspectiveRand 방법에서 흥미로운 부분은이 [opencv sample]이미지 변환 행렬은 OpenCV의

에서 일하고 있어요. 랜덤 생성 된 값을 사용하는 대신 수동으로 회전 각도, 평행 이동, 배율 및 기타 변환 값을 설정하려고합니다. 그러나 행렬 요소를 계산하는 방법을 모르겠습니다.

간단한 계산 예가 도움이됩니다. 감사

답변

0

은 당신이 찾고있는 일부처럼 (3 × 있으며, 다른 매트릭스 스타일은 그들 중 일부는 4 × 4 (전체 이론적 투영 행렬)이다,있다 http://en.wikipedia.org/wiki/3D_projection

프로젝션 매트릭스

입니다 OpenCV)는 투영을 평면에서 다른 평면으로의 변환으로 간주하기 때문에 이러한 제약으로 인해 3x3 행렬로 trasform을 표현할 수 있습니다.

+0

감사합니다 : 그것은 두 행렬, 번역 회전 (A) 하나 하나 (T)을 생성 등과 같은 새로운 매트릭스 M를 구축하여 수행 할 수 있습니다. opencv의 3x3 프로젝션 매트릭스에서 회전 지점을 설정할 수 있습니까? 현재 이미지는 점 (0,0)을 중심으로 회전합니다. – user978029

+0

번역 행렬을 찾으십시오. 회전 중심점을 제어합니다. – Sam

1
double ang = 0.1;  
double xscale = 1.2;  
double yscale = 1.5;  
double xTranslation = 100;  
double yTranslation = 200; 

cv::Mat t(3,3,CV_64F); 
t=0; 

t.at<double>(0,0) = xscale*cos(ang);  
t.at<double>(1,1) = yscale*cos(ang); 

t.at<double>(0,1) = -sin(ang);  
t.at<double>(1,0) = sin(ang); 


t.at<double>(0,2) = xTranslation ;  
t.at<double>(1,2) = yTranslation; 

t.at<double>(2,2) = 1; 

편집 :

회전 (0,0)의 주위에 항상이다. 다른 지점을 중심으로 회전 시키려면 번역 (이동), 회전 및 뒤로 이동해야합니다. 링크에 대한

M = inv(T) * A * T