我在opencv中查看相机校准示例代码。
现在,我很难理解代码的某些行。此代码位于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 :(得分:0)
r
和t
矩阵实际上是为bigmat数据子集构建的标头。因此,当您将某些内容放入r
时,您实际上正在使用bigmat。为了防止这种情况发生,您需要使用cv::MAt::clone()
。 Look up the documentation for mat, fourth bullet