2017-01-25 7 views
1

私はこの形式では、いくつかのカメラキャリブレーションデータを持っている:cv :: Matxを手動で初期化しますか?

0.3072423 -0.0104122 -0.9515744  -208.5614 
0.003617216  0.9999457 -0.009773563  -4.705516 
    0.9516244 -0.0004391983  0.3072633  -152.5427 
      0    0    0    1 

私は、引数としてconst cv::Matx<T, 4, 4>& Mを取る機能があります。 (サードパーティ製のコードから)

template<typename T> 
cv::Matx<T, 6, 1> hom2cayley(const cv::Matx<T, 4, 4>& M) 
{ 
    cv::Matx<T, 3, 3> R(M(0, 0), M(0, 1), M(0, 2), 
     M(1, 0), M(1, 1), M(1, 2), 
     M(2, 0), M(2, 1), M(2, 2)); 
    cv::Matx<T, 3, 1> C = rot2cayley(R); 

    return cv::Matx<T, 6, 1>(C(0, 0), C(1, 0), C(2, 0), 
     M(0, 3), M(1, 3), M(2, 3)); 
} 

申し訳ありませんが、これは愚かな質問ですが、私は、関数に渡すことができるようにどのように私は手動で、上記の値とMatxを記入しない場合は?

私が持っている:

void main() 
{ 
    template<typename T> 

    const cv::Matx<T, 4, 4> camData{ 0.3072423, - 0.0104122, - 0.9515744, - 208.5614, 
     0.003617216,  0.9999457, - 0.009773563, - 4.705516, 
     0.9516244, - 0.0004391983,  0.3072633, - 152.5427, 
     0 ,   0 ,   0 ,   1 }; 

    hom2cayley(camData); //invalid argument, camData is undefined. 
} 

...しかし、それは、上記のエラーが発生します。私の間違いは何ですか?

ありがとうございます。

答えて

1

メインでは、特定のタイプのMatxを使用する必要があります。あなたの目的のために、それは浮動または倍です。 cv::Matx<T, 4, 4>cv::Matx<double, 4, 4>に置き換え、メインのtemplate<typename T>を削除してください。

+0

私は見る!ありがとうございました。 – anti

関連する問題