at()和row()的区别.col()



给定opencv::Mat m1,m2,我想检查m1[i][j]m2[i][j]是否相等。

我看到有两种方法可以做到这一点:

if(m1.row(i).col(j) == m2.row(i).col(j))

:

if(m1.at<float>(i,j)==m2.at<float>(i,j))

注意m1m2都是SIFT矩阵描述符(因此float是元素类型)。

我的问题是:这两种访问方法有什么区别?

尽管这两个操作的最终结果是相同的,但第一个操作的成本更高:

  • m1.row(i)创建Mat对象表示行i,然后
  • m1.row(i)返回的Mat上调用col(j),以获得(i, j)
  • 的单元素Mat表示对象。
  • 同样的操作顺序应用于m2
  • 两个Mat对象与==
  • 比较
  • 四个临时对象被释放

相比之下,m1.at<float>(i,j)只是返回一个float,然后将其与另一个浮点数进行比较,而不创建任何额外的对象。

相关内容

  • 没有找到相关文章

最新更新