c++ - 使用 OpenCV 计算协方差矩阵

标签 c++ matlab opencv covariance

我正在尝试使用 opencv 的 cv::calcCovarMatrix 来获取协方差矩阵。我创建了一个虚拟测试用例:

A = [1 2; 3 4] // matlab style 
B = [1 0; 5 8] 

如果我用 matlab 运行它,我得到:

>> cov(A,B)
ans =
1.6667    4.3333
4.3333   13.6667

根据我的计算,这似乎没问题,但是当我使用 cv::calcCovarMatrix 时,我无法获得相同的结果:

cv::Mat covar, mean;
cv::Mat A = (cv::Mat_<float>(2,2) << 1, 2, 3, 4);
cv::Mat B = (cv::Mat_<float>(2,2) << 1, 0, 5, 8);
cv::Mat x[2] = {A, B};
cv::calcCovarMatrix(x, 2, covar, mean, CV_COVAR_SCRAMBLED );
std::cout << covar << std::endl; 
// gives [6, -6;
//        -6, 6]

我错过了什么?

最佳答案

只是缺少了一面旗帜。尝试:

cv::calcCovarMatrix(x, 2, covar, mean, cv::COVAR_ROWS | cv::COVAR_SCRAMBLED );

COVAR_ROWS mean:所有输入 vector 都存储为样本矩阵的行。 (来自 opencv 3.0 文档)

关于c++ - 使用 OpenCV 计算协方差矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28257246/

相关文章:

matlab - 将元素添加到 matlab 元胞数组成员变量

c++ - const 引用是错误的 C++ 11

c++ - C族语言if语句中2乘2条件的排列

c++ - 如何处理元组中的元素

matlab - '坚持'不适用于matlab中的多位置子图

string - 如何显示字符串中的每个单词?

c++ - 在opencv中聚类图像片段

opencv - 在 OpenCV 2.4 中为 BackgroundSubtractorMOG2 设置 nShadowDetection 和 fTau

c++ - mpi All-to-All Scatter/Gather的高效实现

python - 识别图像中的特定面孔