在许多示例/教程中,我注意到人们使用大括号运算符“()”进行矩阵访问,这在某些情况下使我感到困惑。
问题是:
假设我们有一个名为M的n * m矩阵(例如3x4)。通过“M(0)”或“M(1)”或花括号内的任何其他奇异参数访问它,将返回哪些元素?我认为您应该同时指定行和列(例如“M(0,1)”之类的东西)。
最佳答案
这是来自OpenCV 2.4.2
template<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(int i0, int i1)
{
return ((_Tp*)(data + step.p[0]*i0))[i1];
}
template<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(int i0)
{
return this->at<_Tp>(i0);
}
template<typename _Tp> inline _Tp& Mat_<_Tp>::operator ()(int i0, int i1, int i2)
{
return this->at<_Tp>(i0, i1, i2);
}
这是
Mat::at(int i0)
的定义,Mat_
公开继承自Mat
template<typename _Tp> inline const _Tp& Mat::at(int i0) const
{
if( isContinuous() || size.p[0] == 1 )
return ((const _Tp*)data)[i0];
if( size.p[1] == 1 )
return *(const _Tp*)(data + step.p[0]*i0);
int i = i0/cols, j = i0 - i*cols;
return ((const _Tp*)(data + step.p[0]*i))[j];
}