首页 > 代码库 > vector类转换Mat类
vector类转换Mat类
前言
一个个数据push back到vector之后,可以使用Mat()函数将vector类型转换为Mat类型。
在opencv中Mat类的构造函数中有一个构造函数可以直接把vector类转换为Mat类。
代码:
std::vector<int> responses; cv::Mat tres; tres = Mat(responses, true);//vector2mat
该构造函数的定义如下(在mat.hpp文件中):
template<typename _Tp> 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); //这个拷贝方式的用法非常好! }
注意:copyData的值意味着Mat类型的变量是浅拷贝还是深拷贝.
参考:
1.http://blog.csdn.net/zhjm07054115/article/details/26988581
2.http://blog.csdn.net/u011484045/article/details/44134201
完
做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
vector类转换Mat类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。