SVD分解 Eigen库 opencv库[通俗易懂]

SVD分解 Eigen库 opencv库[通俗易懂]如题,使用库函数进行svd分解,形如A=U*S*VT.Eigen库:#include#include#include//usingEigen::MatrixXf;usingnamespaceEigen;usingnamespaceEigen::internal;usingnamespaceEigen::Architect

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

如题,使用库函数进行svd分解,形如 A = U * S * VT.

Eigen 库:

#include <iostream> #include <Eigen/SVD> #include <Eigen/Dense> //using Eigen::MatrixXf; using namespace Eigen; using namespace Eigen::internal; using namespace Eigen::Architecture; int main() { //-------------------------------svd测试 eigen Matrix3f A; A(0,0)=1,A(0,1)=0,A(0,2)=1; A(1,0)=0,A(1,1)=1,A(1,2)=1; A(2,0)=0,A(2,1)=0,A(2,2)=0; JacobiSVD<Eigen::MatrixXf> svd(A, ComputeThinU | ComputeThinV ); Matrix3f V = svd.matrixV(), U = svd.matrixU(); Matrix3f S = U.inverse() * A * V.transpose().inverse(); // S = U^-1 * A * VT * -1 std::cout<<"A :\n"<<A<<std::endl; std::cout<<"U :\n"<<U<<std::endl; std::cout<<"S :\n"<<S<<std::endl; std::cout<<"V :\n"<<V<<std::endl; std::cout<<"U * S * VT :\n"<<U * S * V.transpose()<<std::endl; system("pause"); //-------------------------------svd测试 eigen return 0; }


OpenCV库:

#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include"opencv2/imgproc/imgproc.hpp" #include <iostream> using namespace std; using namespace cv; void print(CvMat& m){ for (int row = 0; row < m.rows; row++){ float* ptr = (float*)(m.data.ptr + row * m.step);//第row行数据的起始指针 for (int col = 0; col < m.cols; col++) cout<<*(ptr+3*col)<<" "; std::cout<<std::endl; } } int main () { float abt[3 * 3] = { 1,0,1, 0,1,1, 0,0,0 }; float abt_d[3 * 3]={0}, abt_u[3 * 3]={0}, abt_v[3 * 3]={0}; CvMat ABt = cvMat(3, 3, CV_64F, abt);//CvMat 取对数组的引用而不是拷贝 CvMat ABt_D = cvMat(3, 3, CV_64F, abt_d); CvMat ABt_U = cvMat(3, 3, CV_64F, abt_u); CvMat ABt_VT = cvMat(3, 3, CV_64F, abt_v); cvSVD(&ABt, &ABt_D, &ABt_U, &ABt_VT, CV_SVD_V_T);//最后一个参数用于控制返回 UT或U  VT或V std::cout<<"A : "<<std::endl; print(ABt); std::cout<<"U : "<<std::endl; print(ABt_U); std::cout<<"S : "<<std::endl; print(ABt_D); std::cout<<"V : "<<std::endl; print(ABt_VT); system("pause"); return 0; }



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180353.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月19日 上午10:16
下一篇 2022年10月19日 上午10:36


相关推荐

  • 拦截器「建议收藏」

    拦截器「建议收藏」11.拦截器11.1拦截器概述SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。*

    2022年7月3日
    28
  • 实时数据库与时序数据库区别_时间序列数据库

    实时数据库与时序数据库区别_时间序列数据库1、概述在工业大数据数据库存储领域,除了传统的关系型数据库和分布式数据库以外,还有一种类型的数据库是非常常用,而且是非常有必要的,就是实时数据库,以及时序数据库。但是,大家可能会有疑问,都是专门处理时序数据的,这是两种数据库吗?他们之间有什么联系?1.1发展历史实时数据库是数据库系统的一个分支,它适用于处理不断更新的快速变化的数据及具有时间限制的事务处理。实时数据库技术是实时系统和数据库技术相结合的产物。实时数据库最起初是基于先进控制和优化控制而出现的,对数据的实时性要求比较高,因而实时、高效

    2022年10月5日
    4
  • 大数据:简述对数据采集平台的认识

    大数据:简述对数据采集平台的认识大数据 简述对数据采集平台的认识一 数据采集平台的认识任何完整的大数据平台 一般包括以下的几个过程 amp nbsp amp nbsp amp nbsp amp nbsp amp nbsp amp nbsp 数据采集 amp gt 数据存储 amp gt 数据处理 amp am

    2026年3月18日
    2
  • java和前端哪个好学_java和前端哪个难学?「建议收藏」

    java和前端哪个好学_java和前端哪个难学?「建议收藏」不是同一样东西,无法比较。Java和JavaScript哪个难学?前端和后端哪个难学?问Java和前端哪个难学,就像在问牛排和中餐哪个好吃一样。Java是门编程语言,前端是一个领域不能相比较。再回到正题。Java和JavaScript哪个难学?答案是各有各的难。仅仅对于一门编程语言而已,难也难不倒哪里去。你能说语法很难吗?你能说面向对象很难吗?理解了也没有那么难吧。我大学…

    2022年7月8日
    32
  • java OA开源办公系统源码下载

    java OA开源办公系统源码下载javaOA 开源办公系统源码下载源代码下载地址 http www zuidaima com share 155046368126 htm

    2026年3月18日
    1
  • log4j pattern详解_log4j不同的类输出到不同文件中

    log4j pattern详解_log4j不同的类输出到不同文件中spring使用log4j,可以有2种方法。1、在web.xml里不做任何配置。log4j.properties放在classpath根目录下,这时候生成的日志文件就没有相对路径,如果写相对路径,则会生成在安装tomcat的根路径下。2、在web.xml设置。          log4jConfigLocation          WEB-INF/classes/log4j.propert

    2022年8月22日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号