vector類轉換Mat類
阿新 • • 發佈:2017-07-27
flag flags pty col 基本 tails span 用法 思想
前言
一個個數據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, boolcopyData) : 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類