1. 程式人生 > >vector類轉換Mat類

vector類轉換Mat類

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, 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類