给定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))
注意m1
和m2
都是SIFT矩阵描述符(因此float
是元素类型)。
我的问题是:这两种访问方法有什么区别?
尽管这两个操作的最终结果是相同的,但第一个操作的成本更高:
-
m1.row(i)
创建Mat
对象表示行i
,然后 - 在
m1.row(i)
返回的Mat
上调用col(j)
,以获得(i, j)
的单元素 - 同样的操作顺序应用于
m2
- 两个
Mat
对象与==
比较 - 四个临时对象被释放
Mat
表示对象。相比之下,m1.at<float>(i,j)
只是返回一个float
,然后将其与另一个浮点数进行比较,而不创建任何额外的对象。