2011-12-04 30 views
3

有一個很簡單的方法來從載體構建墊...只是這樣做:OpenCV的載體,太而不是元素 - >行

vector<int> myVector; 
Mat myMatFromVector(myVector,true); //the boolean is to define if you want to copy the data 

這個構造器的問題是,每個向量的元素將被放置在矩陣的每一行中。我想要的是我的矢量的每個元素都放在矩陣的每一列中。

As is: 
vector<int> = [1,2,3,4] 
Matrix = [1;2;3;4] 

I want: 
vector<int> = [1,2,3,4] 
Matrix = [1,2,3,4] 

回答

5

要麼指定矩陣的形狀和類型,並通過矢量數據

// constructor for matrix headers pointing to user-allocated data 
    Mat(int _rows, int _cols, int _type, void* _data, size_t _step=AUTO_STEP); 
    Mat(Size _size, int _type, void* _data, size_t _step=AUTO_STEP); 

或撥打在墊子上重塑交換排砂列數(不改變的任何數據)

// creates alternative matrix header for the same data, with different 
    // number of channels and/or different number of rows. see cvReshape. 
    Mat reshape(int _cn, int _rows=0) const; 
+0

對不起,如果這是一個愚蠢的問題,但如何正確地將'myVector'轉換爲構造函數的void * _data'參數? –

+1

Just(void *)myVector [0] –

+0

謝謝。向量不是_simply_數組對嗎?執行'(void *)myVector'是不正確的。 –

2

通過反射矩陣通過其主對角線(即交換行和列)形成的矩陣稱爲轉置。使用OpenCV,您可以輕鬆獲得矩陣A的轉置爲:

Mat A; 
Mat A_transpose = A.t(); 

如果A是[1; 2; 3; 4],A_transpose將根據需要[1,2,3,4]。因此,您可以在將矩陣從矢量轉換後創建矩陣的轉置副本,也可以在隨後在計算中需要時輕鬆創建矩陣。

Mat A, B; 
Mat answer = A.t() * B; 
相關問題