2013-05-10 177 views
4

看起來很容易。畢竟我們知道,一個std或OpenCV的載體可以容易地轉換成矩陣是這樣的:將openCV矩陣轉換爲矢量

vector<Point> iptvec(10); 
Mat iP(iptvec); 

反向建議在OpenCV中的cheatsheet:

vector<Point2f> ptvec = Mat_ <Point2f>(iP); 

然而,有一點需要注意:該矩陣必須只有一行或一列。要轉換的任意矩陣,你必須重塑:

int sz = iP.cols*iP.rows; 
vector<Point2f> ptvec = Mat <Point2f>(iP.reshape(1, sz)); 

否則,你會得到一個錯誤:

* OpenCV的錯誤:斷言失敗(變暗== 2 & &(大小[0] == 1 | | size [1] == 1 || sizes [0] * sizes [1] == 0))in create,file /home/.../OpenCV-2.4.2/modules/core/src/matrix.cpp ,第1385行...

+3

這是一個問題? – alrikai 2013-05-10 01:26:46

回答

1

創建一個2dim向量並填充每一行。例如:

Mat iP=Mat::zeros(10, 20, CV_8UC1); 
vector<vector<int>> ptvec; 
for (int i = 0; i < iP.rows; i++) 
{ 
    vector<int> row;  
    iP.row(i).copyTo(row); 
    ptvec.push_back(row); 
} 
+0

請注意,當您創建一個已知大小的矢量時,預先分配內存總是更好,因爲存在巨大的性能差異。所以,最好這樣做:vector > ptvec(iP.rows,vector (iP.cols)); – kotakotakota 2015-02-24 14:28:59