2016-11-07 6 views
0

私のカメラはより扱い座標でポーズと私は1つの問題に実行し続ける取得するためにいくつかの簡単な変換を実行しようとしている:Opencv .atメソッドが意図したとおりに動作していませんか?

vector< Mat> newpoints; 

    Mat oldpoint = Mat::zeros(4,1, CV_32F); 

    oldpoint.at<float>(3,0) = 1.0; 

    Mat translation = Mat::zeros(4, 4, CV_32F); 
    Mat rotation = Mat::zeros(4, 4, CV_32F); 
    Mat tmp_rot = Mat::zeros(3,3,CV_32F); 
    Mat trans; 
    Mat rota; 

cout << "rearranging coords" << endl; 

for(int i = 0; i < tvecs.size(); i++){ 
    trans = tvecs[i]; 
    rota = rvecs[i]; 

    translation.at<float>(0,0) = 1.0; 
    translation.at<float>(1,1) = 1.0; 
    translation.at<float>(2,2) = 1.0; 
    translation.at<float>(3,3) = 1.0; 

    translation.at<float>(0,3) = trans.at<float>(0); 
    translation.at<float>(1,3) = trans.at<float>(1); 
    translation.at<float>(2,3) = trans.at<float>(2); 

    Rodrigues(rota, tmp_rot); 

    rotation.at<float>(0,0) = tmp_rot.at<float>(0,0); 
    rotation.at<float>(0,1) = tmp_rot.at<float>(0,1); 
    rotation.at<float>(0,2) = tmp_rot.at<float>(0,2); 
    rotation.at<float>(1,0) = tmp_rot.at<float>(1,0); 
    rotation.at<float>(1,1) = tmp_rot.at<float>(1,1); 
    rotation.at<float>(1,2) = tmp_rot.at<float>(1,2); 
    rotation.at<float>(2,0) = tmp_rot.at<float>(2,0); 
    rotation.at<float>(2,1) = tmp_rot.at<float>(2,1); 
    rotation.at<float>(2,2) = tmp_rot.at<float>(2,2); 
    rotation.at<float>(3,3) = 1.0; 
} 

のための内部の値の割り当ては、私は右に.ATを使用しているとき側は意味をなさない。それらは元のマトリックスのものとはまったく異なる値です。

+1

(tmp_rot.depth確認してください)またはtmp_rot.type()。私は浮動小数点の代わりに二重だと思うので、tmp_rot.atを試してくださいどこでも – Micka

+1

それでした。 "trans = tvecs [i]; rota = rvecs [i];" tvecs [i]に.convertTo(trans、CV_32F); rvecs [i] .convertTo(rota、CV_32F); ありがとう – Kronephon

答えて

1

Micha氏が指摘したように、タイプの不一致がありました。で修正

tvecs[i].convertTo(trans, CV_32F); 
    rvecs[i].convertTo(rota, CV_32F); 
    //trans = tvecs[i]; 
    //rota = rvecs[i]; 
関連する問題