我认为你不能向它传递一个 3 通道矩阵。这个小样本是否有效:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int /*argc*/, char** /*argv*/)
{
Mat_<float> samples = (Mat_<float>(3, 3) << 1.0, 2.0, 3.0,
4.0, 5.0, 6.0,
7.0, 8.0, 9.0);
Mat cov, mu;
cv::calcCovarMatrix(samples, cov, mu, CV_COVAR_NORMAL | CV_COVAR_ROWS);
cout << "cov: " << endl;
cout << cov << endl;
cout << "mu: " << endl;
cout << mu << endl;
return 0;
}
它应该输出:
cov:
[18, 18, 18;
18, 18, 18;
18, 18, 18]
mu:
[4, 5, 6]
希望有帮助!