说明参考博客
点云库pcl从入门到精通 官方给出代码,也就是下面的代码,不知道什么原因可以正常写入pcd,但是无法做到在一个视窗中,Harris关键点和点云同时显示,可以注释掉显示原始点云的代码,在视窗中只显示关键点,这样显示出来的关键点如下图所示:
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_cloud.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/io/io.h>
#include <pcl/keypoints/harris_3d.h>//harris
#include <cstdlib>
#include <vector>
#include <pcl/console/parse.h>
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 ();
}
因篇幅问题不能全部显示,请点此查看更多更全内容