OpenCV Mat类和Vector类之间的转换
在OpenCV的Mat类的构造函数中有一个构造函数可以直接把vector<XXX>变成Mat类
该构造函数的定义如下:
template
inline Mat::Mat(const vector<_Tp>& vec, bool copyData)
: flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), //Mat的基本数据类型与vector保持一致
dims(2), rows((int)vec.size()), cols(1), data(0), refcount(0),//生成的Mat是只有1列,行数等于vector.size()的矩阵
datastart(0), dataend(0), allocator(0), size(&rows)
{
if(vec.empty()) //如果vector对象内部没有元素的话,直接返回空矩阵
return;
if( !copyData ) //判断是否需要拷贝数据
{ //如果不需要Copy数据,则直接生成一个以Mat方式操纵vector的Mat索引头
step[0] = step[1] = sizeof(_Tp);
data = datastart = (uchar*)&vec[0];
datalimit = dataend = datastart + rows*step[0];
}
else //将vector内部的数据也完全拷贝一份给mat
Mat((int)vec.size(), 1, DataType<_Tp>::type, (uchar*)&vec[0]).copyTo(*this); //这个拷贝方式的用法挺牛逼的
}