2009-08-30 68 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