2016-12-13 28 views
2

내 카메라 용 Python 2.7에서 OpenCV 2.4를 사용하여 projection_matrix를 계산하려고합니다 (ps eye를 사용하고 있습니다). 나는 cv2.triangulatePoints()를 필요로한다. 이미 rms, camera_matrix, dist_coefs, rvecs 및 tvecs가 있으므로 cv2.calibrateCamera() (OpenCV 예제의 calibrate.py 사용)를 사용하여 보정을 수행했습니다.OpenCV 카메라 projectionMatrix를 파이썬으로 계산하는 방법

그러나 실제로 이러한 매개 변수에서 projection_matrix를 계산하는 데 문제가 있습니다 (온라인에서 파이썬 예제를 찾지 못했습니다).

추 신 : 모든 ps eye 카메라를 보정해야합니까? 나는 3을 가지고 있으며 3D 공간에서 물체를 추적하고 싶습니다.

+0

이 볼 수 있습니다 : http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_calibr ation/py_calibration.html – eyllanesc

답변

0

카메라가 하나 뿐인 경우 투영 행렬은 camera_matrix와 같아야합니다. 단지 하나의 합병증이 있습니다.

cv2.triangulatePoints은 2 개의 다른 카메라에서 2 개의보기로 작동하도록 정의되었습니다.

문서는 또한 함수는 스테레오 카메라들이 관찰하여 (균질 좌표) 3 차원 점을 재구성

상태. 투영 행렬은 stereoRectify()에서 얻을 수 있습니다.

는 그래서 그래, 당신은 각각의 카메라를 보정하고 각각의 카메라 행렬과 회전 행렬과 "기본 카메라"하나의 카메라에서 번역 벡터를 검색하기 위해 카메라의 모든 쌍을 교정해야합니다. K1 및 K2 카메라 행렬의 카메라 주어진 커플 용

,

메인 카메라의 투영 행렬 (카메라 세계 기준 시스템이다)

P1 = K1*[I | z] 
것이 사실

여기서 I는 동일 행렬이고 z는 네 번째 열의 0,0,0 벡터입니다. 당신이 할 수있는 경우 당신은 R이 두 카메라 사이의 회전 행렬 인 경우

1 0 0 0 
    0 1 0 0 
    0 0 1 0 

같은 것을 생각하고 두 카메라 사이의 거리에서 t 수, 두 번째 투영 행렬은 파이썬에서

P2 = K2*[R | t] 

입니다 stereoRectify에서 행렬을 얻을, 하나 개의 방법이해야 할이 수동으로

import numpy as np 
P = np.concatenate((np.dot(K,R),np.dot(K,t)), axis = 1) 
+0

P2 = K1 * [R | t]는 두 번째 행렬에 대해? 그것은 더 의미가 있습니다. – gregorkas

+1

@ 예, 이것은 내 잘못이었습니다. 두 번째 행렬에서 1 색인은 2이어야합니다 : 잘못된 입력. 고맙습니다! 편집 됨. – marcoresk