PCL 曲率计算

news2024/10/1 3:31:50

一、曲率

点云的曲率及计算_点云侠的博客-CSDN博客_点云曲率计算

曲率是曲线弯曲程度的一个度量。

曲率的分类:

1、主曲率、平均曲率、高斯曲率

主曲率:

主曲率计算源码:

//
template <typename PointInT, typename PointNT, typename PointOutT> void
pcl::PrincipalCurvaturesEstimation<PointInT, PointNT, PointOutT>::computePointPrincipalCurvatures (
      const pcl::PointCloud<PointNT> &normals, int p_idx, const pcl::Indices &indices,
      float &pcx, float &pcy, float &pcz, float &pc1, float &pc2)
{
  EIGEN_ALIGN16 Eigen::Matrix3f I = Eigen::Matrix3f::Identity ();
  Eigen::Vector3f n_idx (normals[p_idx].normal[0], normals[p_idx].normal[1], normals[p_idx].normal[2]);
  EIGEN_ALIGN16 Eigen::Matrix3f M = I - n_idx * n_idx.transpose ();    // projection matrix (into tangent plane)

  // Project normals into the tangent plane
  Eigen::Vector3f normal;
  projected_normals_.resize (indices.size ());
  xyz_centroid_.setZero ();
  for (std::size_t idx = 0; idx < indices.size(); ++idx)
  {
    normal[0] = normals[indices[idx]].normal[0];
    normal[1] = normals[indices[idx]].normal[1];
    normal[2] = normals[indices[idx]].normal[2];

    projected_normals_[idx] = M * normal;
    xyz_centroid_ += projected_normals_[idx];
  }

  // Estimate the XYZ centroid
  xyz_centroid_ /= static_cast<float> (indices.size ());

  // Initialize to 0
  covariance_matrix_.setZero ();

  // For each point in the cloud
  for (std::size_t idx = 0; idx < indices.size (); ++idx)
  {
    demean_ = projected_normals_[idx] - xyz_centroid_;

    double demean_xy = demean_[0] * demean_[1];
    double demean_xz = demean_[0] * demean_[2];
    double demean_yz = demean_[1] * demean_[2];

    covariance_matrix_(0, 0) += demean_[0] * demean_[0];
    covariance_matrix_(0, 1) += static_cast<float> (demean_xy);
    covariance_matrix_(0, 2) += static_cast<float> (demean_xz);

    covariance_matrix_(1, 0) += static_cast<float> (demean_xy);
    covariance_matrix_(1, 1) += demean_[1] * demean_[1];
    covariance_matrix_(1, 2) += static_cast<float> (demean_yz);

    covariance_matrix_(2, 0) += static_cast<float> (demean_xz);
    covariance_matrix_(2, 1) += static_cast<float> (demean_yz);
    covariance_matrix_(2, 2) += demean_[2] * demean_[2];
  }

  // Extract the eigenvalues and eigenvectors
  pcl::eigen33 (covariance_matrix_, eigenvalues_);
  pcl::computeCorrespondingEigenVector (covariance_matrix_, eigenvalues_ [2], eigenvector_);

  pcx = eigenvector_ [0];
  pcy = eigenvector_ [1];
  pcz = eigenvector_ [2];
  float indices_size = 1.0f / static_cast<float> (indices.size ());
  pc1 = eigenvalues_ [2] * indices_size;
  pc2 = eigenvalues_ [1] * indices_size;
}

假若某点的曲率是 k1、k2,

平均曲率:表示的是弯曲测量标准,是对一个曲面嵌入周围空间(一个二维的曲面嵌入三维的欧式空间)的曲率进行了局部的描述

那么改点的平均曲率是:K=(k1+k2)/2

高斯曲率:描述的是曲面的凹凸性质的量,当两个量变化程度较大的时候表面曲面内部变化也是很大的。表示的是曲面的光滑程度

同理该点的高斯曲率则是: K=k1*k2

2、表面曲率

表面曲率是点云数据表面的特征值来描述点云变幻程度一个概念。

二、曲率的计算

  方法一: 二次曲面拟合点云曲率

在散点的点云中随机的拿出一个点pi,然后以pi为中心点均匀的取n个点(最好是n个点能覆盖整个点云的边界和特征),然后使用最小二乘法拟合一个二次曲面方程:

​​​​​​​

 

  方法二: 利用相邻点的法向量求一个点的曲率

三、主曲率

01ee93e0d8d24db0ac884ff3d12ecca2.png

c57ee9ba18844f72a76bfaf64b80bb74.png


#if 1  //  显示点云的 主曲率 

int   main()
{
            pcl::PointCloud<pcl::PointXYZ>::Ptr  m_current_cloud(new  pcl::PointCloud<pcl::PointXYZ>);
            if (-1 == pcl::io::loadPCDFile("Armadillo.pcd", *m_current_cloud))//放到与工程中的主.cpp同一位置的文件夹下
            {
                cout << "加载文件失败!" << endl;
                return -1;
            }
            cout << m_current_cloud->points.size() << endl;
            
            // 计算点云的法向量
            pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;
            n.setInputCloud(m_current_cloud);
            pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree <pcl::PointXYZ>);
            n.setSearchMethod(tree);

            n.setKSearch(20);

            // 定义一个新的点云来显示有法向量的值
            pcl::PointCloud<pcl::Normal>::Ptr normals(new  pcl::PointCloud<pcl::Normal>);
            n.compute(*normals);

            // 开始计算主曲率
            pcl::PrincipalCurvaturesEstimation < pcl::PointXYZ, pcl::Normal, pcl::PrincipalCurvatures > p;
            p.setInputCloud(m_current_cloud);
            p.setInputNormals(normals);   // 输入法向量
            p.setSearchMethod(tree);  //使用kd树的方法
            p.setKSearch(10);


            pcl::PointCloud<pcl::PrincipalCurvatures>::Ptr  pri(new pcl::PointCloud<pcl::PrincipalCurvatures>);
            p.compute(*pri);


            cout << "output points.size: " << pri->points.size() << endl;
            // 显示和检索第0点的主曲率。
            cout << "第0点最大主曲率;" << pri->points[0].pc1 << endl;// 输出最大曲率
            cout << "第0点最小主曲率:" << pri->points[0].pc2 << endl;// 输出最小曲率


            //输出主曲率方向(最大特征值对应的特征向量)
            cout << "第0点主曲率方向;" << endl;
            cout << pri->points[0].principal_curvature_x << endl;
            cout << pri->points[0].principal_curvature_y << endl;
            cout << pri->points[0].principal_curvature_z << endl;



            //  显示结果:
            boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("Normal viewer"));
            viewer->setBackgroundColor(0.3, 0.3, 0.3);     //设置背景颜色
            viewer->addText("Curvatures", 10, 10, "text"); //设置显示文字
            viewer->setWindowName("计算主曲率");           //设置窗口名字

            viewer->addCoordinateSystem(0.1);              //添加坐标系


            //设置点云颜色
            pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(m_current_cloud, 0, 225, 0);
            //添加点云到可视化窗口
            viewer->addPointCloud<pcl::PointXYZ>(m_current_cloud, single_color, "cloud"); 
            //设置点云大小
            viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud");


            //添加需要显示的点云法向。m_current_cloud为原始点云模型,normal为法向信息,20表示需要显示法向的点云间隔,即每20个点显示一次法向,2表示法向长度。
            viewer->addPointCloudNormals<pcl::PointXYZ, pcl::Normal>(m_current_cloud, normals, 20, 2, "normals");
            // 添加需要显示的点云主曲率。cloud为原始点云模型,normal为法向信息,pri为点云主曲率,
            // 10表示需要显示曲率的点云间隔,即每10个点显示一次主曲率,10表示法向长度。
            // 目前addPointCloudPrincipalCurvatures只接受<pcl::PointXYZ>和<pcl::Normal>两个参数,未能实现曲率的可视化。
            viewer->addPointCloudPrincipalCurvatures<pcl::PointXYZ, pcl::Normal>(m_current_cloud, normals, pri, 10, 10, "Curvatures");

            while (!viewer->wasStopped())
            {
                viewer->spinOnce(100);
                boost::this_thread::sleep(boost::posix_time::microseconds(100000));
            }
            return 0;
   }
#endif

四、高斯曲率和平均曲率


#if 1  //  显示点云的 平均曲率  和高斯曲率
// 在这里我我们自定一个结构体来存储一个点的 高斯 和平均曲率
struct Curvature
{
    float Gaussian;
    float Mean;

};

int   main()
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr  m_current_cloud(new  pcl::PointCloud<pcl::PointXYZ>);
    if (-1 == pcl::io::loadPCDFile("Armadillo.pcd", *m_current_cloud))//放到与工程中的主.cpp同一位置的文件夹下
    {
        cout << "加载文件失败!" << endl;
        return -1;
    }
    cout << m_current_cloud->points.size() << endl;

    // 计算点云的法向量
    pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;
    n.setInputCloud(m_current_cloud);
    pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree <pcl::PointXYZ>);
    n.setSearchMethod(tree);

    n.setKSearch(20);

    // 定义一个新的点云来显示有法向量的值
    pcl::PointCloud<pcl::Normal>::Ptr normals(new  pcl::PointCloud<pcl::Normal>);
    n.compute(*normals);

    // 开始计算主曲率
    pcl::PrincipalCurvaturesEstimation < pcl::PointXYZ, pcl::Normal, pcl::PrincipalCurvatures > p;
    p.setInputCloud(m_current_cloud);
    p.setInputNormals(normals);   // 输入法向量
    p.setSearchMethod(tree);  //使用kd树的方法
    p.setKSearch(10);


    pcl::PointCloud<pcl::PrincipalCurvatures>::Ptr  pri(new pcl::PointCloud<pcl::PrincipalCurvatures>);
    p.compute(*pri);


   
  // 输出点云中每个点的gauss  mean    min max  曲率
    float   k1 = 0.0;
    float   k2 = 0.0;
    Curvature cv = { 0.0,0.0 }; // 初始化结构体

    vector<Curvature> vc_kv;
    for (size_t i = 0; i < pri->points.size(); i++)
    {
        k1 = pri->points[i].pc1;  //  
        k2 = pri->points[i].pc2;
        cv.Gaussian = k1 * k2;
        cv.Mean = (k1 + k2) / 2;
        vc_kv.push_back(cv);
    }


    // 输出前10个点的高斯曲率和平均曲率
    for (size_t i = 0; i < 50; ++i)

        cout << "第" << i + 1 << "个点的高斯曲率为:" << vc_kv[i].Gaussian <<
        "\n平均曲率为:" << vc_kv[i].Mean << endl;

    //  显示结果:
    boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("Normal viewer"));
    viewer->setBackgroundColor(0.3, 0.3, 0.3);     //设置背景颜色
    viewer->addText("Curvatures", 10, 10, "text"); //设置显示文字
    viewer->setWindowName("Gauss_Mean");           //设置窗口名字
    viewer->addCoordinateSystem(0.1);              //添加坐标系


    //设置点云颜色
    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(m_current_cloud, 0, 225, 0);
    //添加点云到可视化窗口
    viewer->addPointCloud<pcl::PointXYZ>(m_current_cloud, single_color, "cloud");
    //设置点云大小
    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud");


    //添加需要显示的点云法向。m_current_cloud为原始点云模型,normal为法向信息,20表示需要显示法向的点云间隔,即每20个点显示一次法向,2表示法向长度。
    viewer->addPointCloudNormals<pcl::PointXYZ, pcl::Normal>(m_current_cloud, normals, 20, 2, "normals");
    // 添加需要显示的点云主曲率。cloud为原始点云模型,normal为法向信息,pri为点云主曲率,
    // 10表示需要显示曲率的点云间隔,即每10个点显示一次主曲率,10表示法向长度。
    // 目前addPointCloudPrincipalCurvatures只接受<pcl::PointXYZ>和<pcl::Normal>两个参数,未能实现曲率的可视化。
    viewer->addPointCloudPrincipalCurvatures<pcl::PointXYZ, pcl::Normal>(m_current_cloud, normals, pri, 10, 10, "Curvatures");

    while (!viewer->wasStopped())
    {
        viewer->spinOnce(100);
        boost::this_thread::sleep(boost::posix_time::microseconds(100000));
    }
    return 0;
   }
#endif

9293e818056140a9bd60db8a88e6e94f.png

 最大,最小, 高斯  平均 曲率:

49791
第1个点的高斯曲率为:4.06178e-07
平均曲率为:0.00161614
第2个点的高斯曲率为:0.00706714
平均曲率为:0.118564
第3个点的高斯曲率为:0.000544364
平均曲率为:0.033619
第4个点的高斯曲率为:0.00477594
平均曲率为:0.102736
第5个点的高斯曲率为:3.9182e-06
平均曲率为:0.00534493
第6个点的高斯曲率为:2.87925e-06
平均曲率为:0.00232935
第7个点的高斯曲率为:0.00516027
平均曲率为:0.0751841
第8个点的高斯曲率为:8.13437e-07
平均曲率为:0.00145573
第9个点的高斯曲率为:0.0160201
平均曲率为:0.13726
第10个点的高斯曲率为:0.00434192
平均曲率为:0.0998214
第11个点的高斯曲率为:9.45795e-06
平均曲率为:0.0107193
第12个点的高斯曲率为:0.00115901
平均曲率为:0.0643258
第13个点的高斯曲率为:0.00872426
平均曲率为:0.119462
第14个点的高斯曲率为:0.0029446
平均曲率为:0.0737549
第15个点的高斯曲率为:0.00332806
平均曲率为:0.0693298
第16个点的高斯曲率为:0.00296655
平均曲率为:0.0778702
第17个点的高斯曲率为:0.00510475
平均曲率为:0.0865642
第18个点的高斯曲率为:0.00122556
平均曲率为:0.0397958
第19个点的高斯曲率为:3.13014e-06
平均曲率为:0.00241366
第20个点的高斯曲率为:0.00324422
平均曲率为:0.0615579
第21个点的高斯曲率为:3.18268e-06
平均曲率为:0.00562428
第22个点的高斯曲率为:0.000986595
平均曲率为:0.0485682
第23个点的高斯曲率为:0.00713579
平均曲率为:0.0886364
第24个点的高斯曲率为:0.00403163
平均曲率为:0.0697144
第25个点的高斯曲率为:0.000717951
平均曲率为:0.0371761
第26个点的高斯曲率为:3.17172e-06
平均曲率为:0.00470309
第27个点的高斯曲率为:0.000153206
平均曲率为:0.0154591
第28个点的高斯曲率为:0.00464327
平均曲率为:0.0913673
第29个点的高斯曲率为:1.30676e-06
平均曲率为:0.00133414
第30个点的高斯曲率为:0.00224555
平均曲率为:0.0599507
第31个点的高斯曲率为:5.98324e-05
平均曲率为:0.00914722
第32个点的高斯曲率为:0.00271725
平均曲率为:0.0650881
第33个点的高斯曲率为:0.00705604
平均曲率为:0.10315
第34个点的高斯曲率为:0.00111071
平均曲率为:0.0689896
第35个点的高斯曲率为:1.86115e-06
平均曲率为:0.00150633
第36个点的高斯曲率为:8.31745e-07
平均曲率为:0.00188476
第37个点的高斯曲率为:2.755e-05
平均曲率为:0.00531796
第38个点的高斯曲率为:0.0262126
平均曲率为:0.228413
第39个点的高斯曲率为:2.04287e-05
平均曲率为:0.00555236
第40个点的高斯曲率为:7.19944e-06
平均曲率为:0.00374902
第41个点的高斯曲率为:0.000202232
平均曲率为:0.0550556
第42个点的高斯曲率为:0.00172058
平均曲率为:0.107448
第43个点的高斯曲率为:0.00105404
平均曲率为:0.0562264
第44个点的高斯曲率为:0.000223625
平均曲率为:0.0302091
第45个点的高斯曲率为:0.00255065
平均曲率为:0.0645522
第46个点的高斯曲率为:4.42084e-06
平均曲率为:0.00292578
第47个点的高斯曲率为:0.00130016
平均曲率为:0.0557482
第48个点的高斯曲率为:4.4202e-09
平均曲率为:0.000209263
第49个点的高斯曲率为:0.0152398
平均曲率为:0.158841
第50个点的高斯曲率为:0.000180538
平均曲率为:0.0603573

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在低容错业务场景下落地微服务的实践经验

作者&#xff1a;禾连健康 “健康体检是一个低容错的场景&#xff0c;用户到医院体检&#xff0c;由于 IT 原因导致无法完成预约的项目&#xff0c;会对用户体验造成极大的影响。”* ——禾连健康 CTO 邓志豪 禾连健康成立于 2014 年&#xff0c;是一家从体检场景切入的健康管…

Proxmox虚拟环境搭建

一、Proxmox VE简介 ProxmoxVE 是一个完整的、开源的企业虚拟化服务器管理平台。它在单个平台上紧密集成了 KVM 管理程序和 Linux 容器(LXC)、软件定义的存储和网络功能。通过集成的基于 web 的用户界面&#xff0c;您可以轻松地管理虚拟机和容器、集群高可用性或集成的灾难恢…

界面控件DevExtreme——轻松将TreeList数据导出为PDF格式

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序&#xff0c;该套件附带功能齐…

DevOps的流程与规范介绍

在DevOps中想要实现快速、高质量的业务交付&#xff0c;流程和规范是至关重要的。流程包含软件从需求提出到产品上线投产全套生命周期的所有环节&#xff0c;如需求提出、代码提交、上线流程等。规范包含敏捷需求分解规范、用户故事编写规范、需求输出表等。 一、流程 流程用…

[附源码]计算机毕业设计游戏交易平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

链表高频笔试的OJ题

文章目录 一、合并两个有序链表 解题代码 二、反转链表 解题代码 三、分割链表 解题代码 四、链表的回文结构 解题代码 五、链表相交 解题代码 六、环形链表 解题代码 七、复制带有随机指针的复制链表 解题代码 一、合并两个有序链表 题目来源&#xff1a;牛客网。 题目难度&a…

公共用房管理系统有哪些功能和范围?

数图互通房产管理 数图互通公共用房管理系统的管理功能和范围包括: 1、对全部公房进行图形化、电子化、规范、动态化管理。 2、房屋数据定义:可对校区、片区、建筑物、楼层、房间数据进行增删改查&#xff0c;对房间属性数据进行批量修改。 3、档案及多类型附件管理:可对房…

自适应滤波器更新算法-EP1

自适应滤波器更新算法-EP1 自适应滤波器是回声消除系统中非常重要的一个功能模块&#xff0c;而对于自适应滤波器来说&#xff0c;如果更新滤波器系数则是关键所在。本文将介绍几种现有的滤波器更新算法&#xff0c;并附上Matlab测试代码。 1、LMS算法 1.1算法原理 LMS算法即…

【Matplotlib绘制图像大全】(二十二):Matplotlib绘制气泡图

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

变电站远程监控维护,工程师不用出差跑断腿

电力的稳定产出和供应是社会生产、人民生活的重要保障之一。电力监控系统的作用是对变电站设备和变配电系统的运行状态进行监控和管理&#xff0c;保证安全稳定生产&#xff0c;使得终端用户的用电更加安全&#xff0c;同时企业自身的智能化管理水平也能有所提升。 随着经济和城…

TLS版本及CipherSuites确认及设置

在使用Https&#xff08;AS2、RosettaNet等协议&#xff09;传输协议进行数据传输中&#xff0c;有时会遇到下面这些报错信息&#xff1a; ①276–Error during handshake:接收到的消息异常&#xff0c;或格式不正确。 ②13003&#xff1a;Connot conclude ssl handshake.Caus…

苹果电脑误删文件怎么找回?苹果电脑删了文件能恢复吗?苹果电脑文件删除怎么恢复

现如今&#xff0c;使用苹果电脑的用户越来越多&#xff0c;因为其系统流畅&#xff0c;加上小巧便携&#xff0c;成为了不少用户的不二选择&#xff0c;当然&#xff0c;这些用户也经常会遇到一些问题&#xff0c;比如刚刚一位小伙伴就在给小编吐槽他不小心把苹果电脑上面一些…

【golang】1769. 移动所有球到每个盒子所需的最小操作数---时间复杂度O(N)

有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes &#xff0c;其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的&#xff0c;而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。 在一步操作中&#xff0c;你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。…

微信小程序|使用小程序制作一个世界杯球员识别工具

一、前言二、实现流程三、功能开发四、代码块一、前言 四年一次的世界杯正在卡塔尔进行着&#xff0c;不同的社交圈也在疯狂的刷着世界杯的动态&#xff0c;来自全球各地的三十二支队伍的球员是否让你看的眼花缭乱呢&#xff1f; 当朋友跟你聊起昨晚那场比赛某某某球员的精彩表…

WPS中配置MathType及mathtype实现论文公式一键改大小

目录 0 概述 1 WPS中配置MathType 1.1 步骤1&#xff1a; 1.2 步骤2&#xff1a; 1.3 步骤3&#xff1a; 1.4 步骤4&#xff1a; 1.5 步骤5&#xff1a; 2 mathtype实现论文公式一键改大小 2.1 步骤1&#xff1a; 2.2 步骤2&#xff1a; 2.3 步骤3&#xff1a; 2.4…

大数定律与中心极限定理

给大家讲个有趣的故事 明天概统小测哦可惜了 我的智商还停留在小学时代可惜了&#xff0c;我需要努力学习Physice Doctor in FutureChebyshev 不等式 &#xff08;弱&#xff09;大数定律 Markov 大数定律 Chebyshev 大数定律 独立同分布大数定律 Bernoulli 大数定律 Khinchin …

npm打包整个过程

将自己写的代码包上传到npm&#xff0c; 方便后续下载安装&#xff0c; 步骤如下&#xff1a; 上传 打开npm官方网站&#xff1a; www.npmjs.com; 进行注册 注册需要用户名&#xff0c;密码和邮箱&#xff0c; 当注册完成后需打开邮箱进行验证&#xff08;邮箱不验证无法上传&…

JUC系列(九) CAS 与锁的理解

&#x1f4e3; &#x1f4e3; &#x1f4e3; &#x1f4e2;&#x1f4e2;&#x1f4e2; ☀️☀️你好啊&#xff01;小伙伴&#xff0c;我是小冷。是一个兴趣驱动自学练习两年半的的Java工程师。 &#x1f4d2; 一位十分喜欢将知识分享出来的Java博主⭐️⭐️⭐️&#xff0c;擅…

DZ-51/220【中间继电器】

系列型号 DZ-51中间继电器; DZ-52中间继电器; DZ-53中间继电器; DZ-54中间继电器; JY-16A中间继电器; 一、用途 DZ-51/220;DZ-51/400中间继电器​ (以下简称继电器)用于自动控制装置中&#xff0c;以扩大被控制的电路和提高接通能力。 二、主要技术参数 额定电压&#xff1a;D…

Spring(存储Bean对象五大类注解,获取Bean对象三种注入方式)

目录 1. 先进行配置扫描路径 2. 存储 Bean 对象 ( 添加注解存储 Bean 对象) 2.1 Controller [控制器存储] 2.2 Service [服务存储] 2.3 Repository [仓库存储] 2.4 Configuration [配置存储] 2.5 Component [组件存储] 2.6 五大类注解的作用和关系 2.7 Bean的命名规则…