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

时间:2016-07-05 02:34:17

标签: c++ opencv matrix

鉴于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是元素类型)。

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

1 个答案:

答案 0 :(得分:2)

虽然这两项操作的最终结果相同,但第一项操作成本更高:

  • m1.row(i)创建一个代表行Mat的{​​{1}}对象,然后
  • i返回的col(j)调用
  • Mat,以获取m1.row(i)
  • 上代表对象的单个元素Mat
  • 相同的操作序列适用于(i, j)
  • 将两个m2个对象与Mat
  • 进行比较
  • 四个临时对象被取消分配

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