|
程序的主要功能:显示三维点云图,并实现拉框片选点云,然后只显示矩形框选中的点云。
实现方式:为了实现拉框片选点云,1)注册了片选回调函数areapickingcallback
viewer_->registerAreaPickingCallback(&PCLViewer::areaPickingCallback, *this);2)实现了areapickingCallback函数
void PCLViewer::areaPickingCallback(const pcl::visualization::AreaPickingEvent& event, void* cookie)
{
std::cout << "areaPicking event active" << std::endl;
pcl::PointIndices::Ptr inliers;
inliers = pcl::PointIndices::Ptr(new pcl::PointIndices);
if (event.getPointsIndices(inliers->indices) != false)
{
pcl::ExtractIndices<pcl::PointXYZ> extract;
extract.setIndices(inliers);
extract.setInputCloud(point_cloud_);
extract.setNegative(false); //矩形框选中的点
pcl::PointCloud<pcl::PointXYZ>::Ptr new_cloud_ = pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>);
extract.filter(*new_cloud_);
pcl::copyPointCloud(*new_cloud_, *point_cloud_);
std::cout << "selected_cloud has " << point_cloud_->points.size() << " points." << std::endl;
viewer_->removeAllPointClouds();
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> handle(point_cloud_, 50, 100, 139);
viewer_->addPointCloud(point_cloud_, handle);//显示矩形框选中的点云
}
}
片选方法:按下X键,鼠标拉矩形框片选,再按X键,显示片选后的结果
问题:我按下X键,再鼠标拉矩形框片选,这个时候如果不按X键,而是在显示点云图的区域直接点击鼠标左键,将会出现“程序停止运行”错误,即使这个时候是应该按X键才显示正确结果,但是按鼠标左键程序不应该直接崩掉啊,鼠标左键很容易误点到啊。
file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\2512662393\QQ\WinTemp\RichOle\6I}8]2`QZ84{15OHFHN}9HU.png
求救各位大神看看,该如何解决啊????先拜谢了!
|
|