//包含OpenCV的头文件
#include <opencv2/opencv.hpp>
#include <opencv2/core/mat.hpp>
#include <iostream>
#include <time.h>
using namespace std;
//使用OpenCV的命名空间
using namespace cv;
int main()
{
//2行5列
Mat Pt(2, 5, CV_64FC1);
Pt.at<double>(0, 0) = 2;
Pt.at<double>(1, 0) = 4;
Pt.at<double>(0, 1) = 2;
Pt.at<double>(1, 1) = 2;
Pt.at<double>(0, 2) = 3;
Pt.at<double>(1, 2) = 3;
Pt.at<double>(0, 3) = 4;
Pt.at<double>(1, 3) = 4;
Pt.at<double>(0, 4) = 4;
Pt.at<double>(1, 4) = 2;
cout << Pt << endl;
//计算协方差矩阵
Mat coVar, meanVar;
calcCovarMatrix(Pt, coVar, meanVar, COVAR_NORMAL|COVAR_COLS);
cout << "Covar is:\n" << coVar << endl;
cout << "Mean is:\n" << meanVar << endl;
//计算协方差的逆
Mat iCovar;
invert(coVar, iCovar, DECOMP_SVD);
Mat pt1(2, 1, CV_64FC1);
Mat pt2(2, 1, CV_64FC1);
pt1.at<double>(0, 0) = 1;
pt1.at<double>(1, 0) = 1;
pt2.at<double>(0, 0) = 5;
pt2.at<double>(1, 0) = 5;
double Maha1 = Mahalanobis(pt1, meanVar, iCovar);
double Maha2 = Mahalanobis(pt2, meanVar, iCovar);
cout << "Maha 距离1是:\t" << Maha1 << endl;
cout << "Maha 距离2是:\t" << Maha2 << endl;
return 0;
}