我正在尝试使用 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/