我的问题是基于以下代码。
Vec4b *rv = mMat.ptr<Vec4b> (50);
我不明白Vec4b是什么意思。我知道Vec4i,也就是线段坐标。同样地,我试着找出它包含什么。以下代码
std::cout<<rv[1]<<std::endl;
给出了一个输出:
我不知道那些参数是什么意思。令人惊讶的是,它显示了大于4个参数的输出。如。,rv[4],rv[5]等。[8,7,10,10]
所以我真的不明白Vec4b做了什么。还有mMat.ptr.我找不到关于Vec4b和Mat.ptr.
的好的在线资源所以我真的不明白Vec4b做了什么
从OpenCV的API可以看出,它的定义如下:
template<typename _Tp, int n> class Vec : public Matx<_Tp, n, 1> {...};
...
typedef Vec<uchar, 4> Vec4b;
即包含4个uchar
(unsigned char
)值。Vec
类常用来描述多通道阵列的像素类型,如CV_RGBA
。
还有mMat.ptr.
Mat::ptr()
返回指向指定矩阵行的指针。
对于你的代码,
Vec4b *rv = mMat.ptr<Vec4b> (50);
在此之后,rv
将是一个类型为Vec4b
的指针,指向Mat mMat
的51
-第一行。
Edit:由于所有Mat
的数据都是连续的,在当前行的所有像素之后,例如在rv[index]
中使用大索引(用于index >= mMat.cols
),您将从其他行获得数据。