Harris关键点

说明参考博客
PCL关键点检测–Harris关键点

点云库pcl从入门到精通 官方给出代码,也就是下面的代码,不知道什么原因可以正常写入pcd,但是无法做到在一个视窗中,Harris关键点和点云同时显示,可以注释掉显示原始点云的代码,在视窗中只显示关键点,这样显示出来的关键点如下图所示:

Harris关键点_第1张图片在没有注释掉原始点云的时候,出现的也是这个视窗,不清楚是为什么
而且终端中打印生成的关键点数量也是4000多个点,写入的Harris_keypoints.pcd文件显示的也是4000多个点。
Harris关键点_第2张图片

#include 
#include 
#include 
#include 
#include 
#include //harris
#include 
#include 
#include 

int main(int argc, char  *argv[])
{

    //读取pcd文件 作为输入点云
    pcl::PointCloud<pcl::PointXYZ>::Ptr input_cloud (new pcl::PointCloud<pcl::PointXYZ>);//声明读取的点云 作为输入点云
   
    std::string filename= "/home/ywj/study_PCL/pcl_tutorial/chapter8/3/room.pcd"; //pcd文件路径
    // 读取点云
    if(pcl::io::loadPCDFile(filename,*input_cloud)==-1)
    {
        //文件没有打开
        std::cout << "Was not able to open file:" <<filename<<std::endl ;
        return 0;
    }
    /*设置 harris 相关参数*/
    const float r_normal = 0.1 ;
	const float r_keypoint = 0.1 ;
    pcl::PointCloud<pcl::PointXYZI>::Ptr Harris_keypoints (new pcl::PointCloud<pcl::PointXYZI>);//声明 Harris 关键点 点云

    /* 声明Harris 关键点 检测 对象  */
    pcl::HarrisKeypoint3D<pcl::PointXYZ,pcl::PointXYZI,pcl::Normal>* harris_detector = new pcl::HarrisKeypoint3D<pcl::PointXYZ,pcl::PointXYZI,pcl::Normal> ;

    /*设置输入点云*/
    harris_detector->setInputCloud (input_cloud);
    /* 计算关键点 结果返回在 Harris_keypoints 中  */
    harris_detector->compute (*Harris_keypoints);
    //输出检测到harris 角点  的 个数
    std::cout<<"Harris_keypointsg 个数:"<<Harris_keypoints->size()<<std::endl;
    pcl::PCDWriter writer; //声明写pcd文件对象

    //将得到的角点 写入pcd 文件中
    writer.write<pcl::PointXYZI> ("Harris_keypoints.pcd",*Harris_keypoints,false);
    //可视化输入点云和关键点
    typedef pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZI> ColorHandlerT3;
    pcl::visualization::PCLVisualizer viewer("Harris keypoint");
    viewer.setBackgroundColor( 255, 255, 255 );//设置背景
        viewer.addPointCloud(input_cloud, "input_cloud");
    viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR,0,0,0,"input_cloud");
     viewer.addPointCloud (Harris_keypoints, ColorHandlerT3 (Harris_keypoints, 0.0, 0.0, 255.0),"Harris_keypoints");
    viewer.setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 8, "Harris_keypoints");

   
    viewer.spin ();
}

你可能感兴趣的:(点云库pcl从入门到精通,计算机视觉,人工智能)