2016-12-13 9 views
2

私は、私のカメラ用にPython 2.7でOpenCV 2.4を使ってprojection_matrixを計算しようとしています(私はps eyeを使っています)。私はcv2.triangulatePoints()のためにそれが必要です。私は既に、cv2.calibrateCamera()(Calibrate.pyのOpenCVサンプルを使用)を使って校正を行ったので、rms、camera_matrix、dist_coefs、rvecs、およびtvecsがあります。OpenCVカメラprojectionMatrixをPythonで計算する方法

しかし、実際にはこれらのパラメータからprojection_matrixを計算する際に問題があります(私はPythonの例をオンラインで見つけられませんでした)。

PS:PSのアイカメラをすべてキャリブレーションする必要がありますか?私は3つあり、3D空間でオブジェクトを追跡したいと思います。

+0

がこれを見ていますation/py_calibration.html – eyllanesc

答えて

0

カメラが1台しかない場合、投影行列はcamera_matrixと同じにする必要があります。ただ一つの合併症があります。

cv2.triangulatePointsは、2つの異なるカメラからの2つのビューで動作するように定義されています。

ドキュメントは、関数は、ステレオカメラを用いて、それらの観察を使用して(均質 座標で)3次元の点を再構成

と述べています。 投影行列はstereoRectify()から得ることができます。

はそうです、あなたはそれぞれのカメラを校正し、各カメラ行列と回転行列と「メインカメラ」への1台のカメラから並進ベクトルを取得するためにカメラのすべてのペアを校正する必要があります。カメラの所与のカップルのため

、K1とK2とカメラ行列は、メインカメラの射影行列は、(カメラが世界座標系である)

P1 = K1*[I | z] 
ある

ことは事実であります

ここで、Iは同一行列であり、zは第4列の0,0,0ベクトルである。 あなたは、Rは、2台のカメラ間と2台のカメラ間の距離トンの回転行列である場合は、可能であれば、第2の投影行列は、Pythonで

P2 = K2*[R | t] 

ある

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

のようなものを考えることができますhttp://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_calibr:stereoRectifyから行列が得られず、手動でそれを行うための一つの方法は、

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

P2 = K1 * [R |第2の行列についてはt?もっと理にかなっている。 – gregorkas

+1

@gregorkasはい、これは私のせいでした。 2番目の行列では、1のインデックスは2でなければなりません。ありがとうございました!編集されました。 – marcoresk

関連する問題