2015-05-29 26 views
2

我有以下代码:参数在meanStdDev功能

Scalar m; //Scalar is a class for a 4 variable vector. m is its instance.   
Scalar std; 
meanStdDev(hist, m, std); 

它运作良好,但它并不适用于以下工作。

vector <float> m; 
vector <float> std; 
meanStdDev(hist, m, std); 

我不能为了解这里的问题也是我创建一个载体,就像在标量的情况。请解释。

回答

4

2问题在这里:

1)它需要一个固定大小的东西。

2)你的载体最初是空

你可以使用一个标量,一个(预分配的)垫,或Vec4d,但一个std :: vector的。

Mat hist(10,1,CV_32F); 
randu(hist,1,100); 

cerr << hist << endl; 

{ 
    Scalar m, stdv; 

    meanStdDev(hist, m, stdv); 
    cerr << m << " " << stdv << endl; 
} 

{ 
    Mat m(1,4,CV_64F),stdv(1,4,CV_64F); 

    meanStdDev(hist, m, stdv); 
    cerr << m << " " << stdv << endl; 
} 

{ 
    Vec4d m,stdv; 

    meanStdDev(hist, m, stdv); 
    cerr << m << " " << stdv << endl; 
} 


[53.497997; 
20.72666; 
40.704884; 
81.624123; 
44.276165; 
25.63018; 
77.537399; 
76.447281; 
31.471653; 
70.540741] 
[52.2457, 0, 0, 0] [21.8056, 0, 0, 0] 
[52.245703125] [21.80564409388921] 
[52.2457, 0, 0, 0] [21.8056, 0, 0, 0] 
+0

理解你的第一点,但不是第二个块,因为在你的第二个块Mat m(1,4,CV_64F)也是一个空向量。 – Navdeep

+0

不,它有4个(未初始化的)元素,你的向量没有。 – berak

+0

好的感谢您的好解释。 – Navdeep