相机标定示例代码(bigmat 矩阵)

Posted

技术标签:

【中文标题】相机标定示例代码(bigmat 矩阵)【英文标题】:camera calibration sample code (bigmat matrix) 【发布时间】:2013-03-04 13:06:55 【问题描述】:

我正在查看 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' 应该位于右侧,但没有。

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

谢谢

【问题讨论】:

如果正确,请采纳。 【参考方案1】:

rt 矩阵实际上是为 bigmat 数据子集构建的标头。因此,当您将某些内容放入r 时,您实际上是在对 bigmat 进行操作。为了防止这样的事情发生,您需要使用cv::MAt::clone()。 Look up the documentation for mat, fourth bullet.

【讨论】:

没有问题,但欢迎您接受答案。答案分数下方的绿色勾号。

以上是关于相机标定示例代码(bigmat 矩阵)的主要内容,如果未能解决你的问题,请参考以下文章

手眼标定之相机随动eye-in-hand 示例:handeye_movingcam_calibration

如何不用标定板来确定相机的外参矩阵

相机标定:关于本质矩阵和基本矩阵

相机标定原理介绍

九点标定为啥需要的是9个点?

相机标定:投影矩阵