计算矩阵(cv::Mat)的特征值和特征向量
正定矩阵(positive definite matrix):矩阵的特征值都是正数;
半正定矩阵(semi-definite matrix):矩阵的特征值都是非负数(正数和0);
判断矩阵是否正定或者半正定就需要计算矩阵的特征值和特征向量, 可以使用OpenCV中的eigen()函数进行计算.
数学计算的方法可以参考"矩阵论".
代码:
#include <opencv.hpp> int main(void){ double myArray[3][3] = { 2, 1, 0, 1, 3, 1, 0, 1, 2 }; cv::Mat myMat = cv::Mat(3, 3, CV_64FC1, myArray); cv::Mat eValuesMat; cv::Mat eVectorsMat; std::cout << "My Mat: " << std::endl; for(auto i=0; i<myMat.rows; i++){ for(auto j=0; j<myMat.cols; j++){ std::cout << myMat.at<double>(i,j) << " "; } std::cout << std::endl; } cv::eigen(myMat, eValuesMat, eVectorsMat); std::cout << "Eigen Values : " << std::endl; for(auto i=0; i<eValuesMat.rows; i++){ for(auto j=0; j<eValuesMat.cols; j++){ std::cout << eValuesMat.at<double>(i,j) << " "; } std::cout << std::endl; } std::cout << "Eigen Vectors: " << std::endl; for(auto i=0; i<eVectorsMat.rows; i++){ for(auto j=0; j<eVectorsMat.cols; j++){ std::cout << eVectorsMat.at<double>(i,j) << " "; } std::cout << std::endl; } return 0; }
输出:
转载于:https://blog.51cto.com/spikeking/1388045