2013-03-04 156 views
0

我正在看opencv中的相机校准示例代码。相机校准示例代码(bigmat矩阵)

现在,我很理解代码的一些行。该代码位于Opencv 2.4.3的示例代码文件夹中。

我的问题是关于C++而不是opencv。

以下是opencv中的示例代码。

if(!rvecs.empty() && !tvecs.empty()) 
{ 
    CV_Assert(rvecs[0].type() == tvecs[0].type()); 
    Mat bigmat((int)rvecs.size(), 6, rvecs[0].type()); 

    for(int i = 0; i < (int)rvecs.size(); i++) 
    { 
    Mat r = bigmat(Range(i, i+1), Range(0,3)); 
    Mat t = bigmat(Range(i, i+1), Range(3,6)); 

    CV_Assert(rvecs[i].rows == 3 && rvecs[i].cols == 1); 
    CV_Assert(tvecs[i].rows == 3 && tvecs[i].cols == 1); 
    //*.t() is MatExpr (not Mat) so we can use assignment operator 
    r = rvecs[i].t(); 
    t = tvecs[i].t(); 
    } 
    cvWriteComment(*fs, "a set of 6-tuples (rotation vector + translation vector) for each view",  0); 
    fs << "Extrinsic_Parameters" << bigmat; 

我的问题是如何将数据放入'bigmat'中。要将值设置为变量,'bigmat'应该位于右侧,但不是。

有没有人熟悉这种代码?帮我。

由于

+0

请接受答案,如果它是正确的。 – morynicz 2013-03-06 19:46:31

回答

0

rt矩阵实际上头建立用于bigmat数据的子集。所以,当你在r中加入东西时,你实际上正在使用bigmat。为防止发生这种情况,您需要使用cv::MAt::clone()Look up the documentation for mat, fourth bullet

+0

非常感谢,morynicz! – user2131811 2013-03-06 13:17:06

+0

没有问题,但欢迎您接受答案。答案下方的绿色勾号。 – morynicz 2013-03-06 19:46:05