2009-08-30 65 views
1

嗯,我最有可能的的極端愚蠢的問題,但不能弄明白而我會即將失去我的理智希望有人能使用OpenCV的一些矩陣計算幫助C++向量問題

vector<CvMat*> sample; 
for(int x = 0; x < 29; x += 2) 
{ 
    for(int b = 0; b < 22; b += 2) 
    { 
     cvmSet(g, 0, b, cvmGet(NormalVector, 0, x + b)); 
     cvmSet(g, 0, b + 1, cvmGet(NormalVector, 0, x + b + 1)); 
    } 
    sample.push_back(g); 
} 

以及即時通訊basiacllay什麼我在做的是我從一個大矩陣創建一些小矩陣,並將它們放入一個稱爲「樣本」的Vector中。第一個循環僅僅是一個基於計數器的事物,第二個循環用於在第二個循環之後創建小矩陣向量

但問題是這些循環後,當我嘗試達到ve中的矩陣之一我總是得到最後放入矢量中的那個。 我使用這些方法來訪問矢量元素
sample [0]; sample.at(6);
sample.at(6);
對於這兩個我得到了相同的矩陣,最後添加到向量中。我做錯了什麼?

回答

4

由於您的sample載體是指針列表,你需要確保你爲你添加到向量中每個元素創建的CvMat一個新的實例。否則,這聽起來像你所有的元素都指向相同的東西(g)。

如果CvMat有一個拷貝構造函數,你可以通過這樣做來解決它:

vector <CvMat> sample; 
for(int x =0 ; x<29; x+=2) { 
    // ... 
    sample.push_back(*g); 
} 

這將創建CvMat對象的載體,和push_back(*g)使得矩陣的副本,並推它在矢量的背面。

+0

thx我現在明白了 – Emre 2009-08-30 23:33:21

0
vector < CvMat*> sample; 

是指針的CvMat中的向量,而你推汽車無「g」進去。您需要創建CvMat的新實例並將其添加到您的矢量中,而不是每次都添加「g」。

+0

ahhh我明白了。我怎麼錯過了。謝謝你 – Emre 2009-08-30 23:32:36