OpenCV - 计算矩阵(cv::Mat)的特征值和特征向量

计算矩阵(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;

}

 

输出:

 

 

 


 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElminsterAumar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值