#include "ORB/global_defination/global_defination.h" // 导入ORB的全局定义
#include "ORB/ORBFeature.hpp" // 导入ORB特征相关的头文件using namespace ORB; // 使用ORB命名空间int main(int argc, char** argv)
{google::InitGoogleLogging(argv[0]); // 初始化Google日志系统,参数是程序名FLAGS_alsologtostderr = true; // 将日志同时输出到标准错误输出std::string config_path = WORK_SPACE_PATH + "/config/camera_para.yaml"; // 相机参数配置文件的路径std::string image_path = WORK_SPACE_PATH + "/image/distorted.png"; // 图像文件的路径// 创建一个ORB特征的对象,使用智能指针管理其生命周期std::shared_ptr<ORBFeature> orb_feature_ptr = std::make_shared<ORBFeature>(image_path, config_path);std::vector<cv::KeyPoint> vKeypoints; // 用于存储提取出的关键点cv::Mat descriptor; // 用于存储关键点对应的描述子// 提取ORB特征orb_feature_ptr->ExtractORB(vKeypoints, descriptor);// 读入图像文件cv::Mat image = cv::imread(image_path, cv::IMREAD_GRAYSCALE);// 将关键点的数量和描述子的数量输出到日志LOG(INFO) << "vKeypoints size " << vKeypoints.size();LOG(INFO) << "descriptor size " << descriptor.rows;cv::Mat outImage;// 在图像中绘制关键点cv::drawKeypoints(image, vKeypoints, outImage, cv::Scalar::all(-1), cv::DrawMatchesFlags::DEFAULT);// 显示包含关键点的图像cv::imshow("这是ORB-SLAM2提取的特征点", outImage);// 提取ORB特征(这行代码可能是重复了,或者是预留的,下面没有给出输入参数)orb_feature_ptr->ExtractORB();// 等待用户输入cv::waitKey();return 0;
}
std::shared_ptr<ORBFeature> orb_feature_ptr =std::make_shared<ORBFeature>(image_path, config_path);
ORBFeature(image_path, config_path)
:这部分代码调用了ORBFeature
的构造函数,并且传入image_path
和config_path
这两个参数。也就是说,它创建了一个ORBFeature
的对象。调用
ORBFeature
类的构造函数,这个构造函数接收两个参数:image_path
和config_path
。这个调用会创建一个ORBFeature
对象。std::make_shared<ORBFeature>
:std::make_shared
是一个模板函数,它的作用是创建一个对象并返回一个指向该对象的shared_ptr
智能指针。在这个例子中,std::make_shared<ORBFeature>(image_path, config_path)
就是创建了一个ORBFeature
对象,并返回一个std::shared_ptr<ORBFeature>
类型的智能指针,这个智能指针指向新创建的ORBFeature
对象。所以,
std::make_shared<ORBFeature>(image_path, config_path)
就是创建了一个ORBFeature
对象,并用一个std::shared_ptr<ORBFeature>
智能指针来管理它。这样做的好处是,你不需要手动管理这个ORBFeature
对象的内存,当这个ORBFeature
对象不再被使用时,shared_ptr
会自动释放这个对象的内存。
std::make_shared
是一个模板函数,它用于创建一个std::shared_ptr
实例。这个函数需要一个类型参数(在尖括号< >
中指定),以及一个用于构造该类型对象的参数列表(在圆括号( )
中指定)。
std::make_shared
会创建一个新的对象,并返回一个std::shared_ptr
,该指针指向新创建的对象。例如,std::make_shared<int>(42)
会创建一个新的int
对象,其值为42,并返回一个指向该对象的std::shared_ptr<int>
。例子中,
std::make_shared<ORBFeature>(image_path, config_path)
会创建一个新的ORBFeature
对象,使用image_path
和config_path
作为构造函数的参数,并返回一个指向该对象的std::shared_ptr<ORBFeature>
。最后,将这个智能指针赋值给
orb_feature_ptr
。以后你可以通过orb_feature_ptr
来使用这个ORBFeature
对象。