0
点赞
收藏
分享

微信扫一扫

OpenCV + CPP 系列(圩五)标准差,协方差与 特征值、特征向量


文章目录

  • ​​一、标准差,协方差​​
  • ​​二、特征值、特征向量​​
  • ​​演示​​

一、标准差,协方差

矩阵数据处理理论:

计算协方差示例图:

OpenCV + CPP 系列(圩五)标准差,协方差与 特征值、特征向量_opencv

二、特征值、特征向量

有矩阵 ,其特征值与特征向量定义:  ( 特征值 , 特征向量

特征值为零时,矩阵不可逆:

OpenCV + CPP 系列(圩五)标准差,协方差与 特征值、特征向量_特征向量_06

计算演示图:

OpenCV + CPP 系列(圩五)标准差,协方差与 特征值、特征向量_特征值_07


OpenCV + CPP 系列(圩五)标准差,协方差与 特征值、特征向量_c++_08


头文件 ​​FaceRecognize.h​​:

#pragma once
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;


class FaceRecognize {
public:
void meanStdDev_demo(Mat& image);


};

主函数​​main.cpp​

#include "FaceRecognize.h"



int main(int argc, char**argv) {
const char* input_path = "D:/Desktop/222222.png";
Mat image = imread(input_path);
if (image.empty()) {
printf("Read image failed!");
exit(-1);
}

FaceRecognize face_recognize;
face_recognize.meanStdDev_demo(image);

return 0;
}

演示

#include "FaceRecognize.h"



void FaceRecognize::meanStdDev_demo(Mat& image) {
Mat means_dst, stddev_dst;

// 计算矩阵:平均值,标准差
meanStdDev(image, means_dst, stddev_dst);
printf("means_dst rows : %d, %d\n", means_dst.rows, means_dst.cols);
printf("stddev_dst rows : %d, %d\n", stddev_dst.rows, stddev_dst.cols);
for (int i = 0; i < means_dst.rows; i++){
printf("means_dst [%d] : %f\n", i, means_dst.at<double>(i));
printf("stddev_dst[%d] : %f\n", i, stddev_dst.at<double>(i));
}

// 计算矩阵:协方差
Mat sample = (Mat_<double>(5, 3) <<
90, 60, 90,
90, 90, 30,
60, 60, 60,
60, 60, 90,
30, 30, 30
);
Mat cov, mu;
calcCovarMatrix(sample, cov, mu, COVAR_NORMAL | COVAR_ROWS);
cout << "cov:\n" << cov / 5 << endl;
cout << "mu:\n" << mu << endl;

// 计算矩阵:特征值,特征向量
Mat eigenVal, eigenVec;
Mat sample2 = (Mat_<double>(2, 2) << 2, 4, 4, 2);
cv::eigen(sample2, eigenVal, eigenVec);
for (size_t i = 0; i < eigenVal.rows; i++){
cout << "eigenVal: " << eigenVal.at<double>(i) << endl;
}
cout << "\n eigenVec:\n" << eigenVec << endl;
}

//==============输出=================
// means_dst rows : 3, 1
// stddev_dst rows : 3, 1
// means_dst [0] : 140.189326
// stddev_dst[0] : 110.839304
// means_dst [1] : 50.316178
// stddev_dst[1] : 69.701243
// means_dst [2] : 52.092850
// stddev_dst[2] : 77.952390
// cov:
// [504, 360, 180;
// 360, 360, 0;
// 180, 0, 720]
// mu:
// [66, 60, 60]
// eigenVal: 6
// eigenVal: -2
//
// eigenVec:
// [0.7071067811865475, 0.7071067811865475;
// 0.7071067811865475, -0.7071067811865475]


举报

相关推荐

0 条评论