PCL 库中的pcl::visualization::PCLVisualizer类彩色显示点云
2015-05-13 02:27
393 查看
#include <pcl/io/openni_grabber.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/io/io.h>
#include <pcl/common/time.h>
#include <pcl/features/integral_image_normal.h>
#include <pcl/features/normal_3d.h>
#include <pcl/ModelCoefficients.h>
#include <pcl/segmentation/planar_region.h>
#include <pcl/segmentation/organized_multi_plane_segmentation.h>
#include <pcl/segmentation/organized_connected_component_segmentation.h>
#include <pcl/filters/extract_indices.h>
typedef pcl::PointXYZRGBA PointT;
class OpenNIOrganizedMultiPlaneSegmentation
{
private:
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
pcl::PointCloud<PointT>::ConstPtr prev_cloud;
boost::mutex cloud_mutex;
public:
OpenNIOrganizedMultiPlaneSegmentation ()
{
}
~OpenNIOrganizedMultiPlaneSegmentation ()
{
}
boost::shared_ptr<pcl::visualization::PCLVisualizer>
cloudViewer (pcl::PointCloud<PointT>::ConstPtr cloud)
{
boost::shared_ptr < pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("Viewer"));
viewer->setBackgroundColor (0, 0, 0);
viewer->addPointCloud<PointT> (cloud,"cloud");
viewer->addCoordinateSystem (1.0, "global");
viewer->initCameraParameters ();
return (viewer);
}
void
cloud_cb_ (const pcl::PointCloud<PointT>::ConstPtr& cloud)
{
if (!viewer->wasStopped ())
{
cloud_mutex.lock ();
prev_cloud = cloud;
cloud_mutex.unlock ();
}
}
void
run ()
{
pcl::Grabber* interface = new pcl::OpenNIGrabber ();
boost::function<void(const pcl::PointCloud<PointT>::ConstPtr&)> f = boost::bind (&OpenNIOrganizedMultiPlaneSegmentation::cloud_cb_, this, _1);
//make a viewer
pcl::PointCloud<PointT>::Ptr init_cloud_ptr (new pcl::PointCloud<PointT>);
viewer = cloudViewer (init_cloud_ptr);
boost::signals2::connection c = interface->registerCallback (f);
interface->start ();
while (!viewer->wasStopped ())
{
viewer->spinOnce (100);
if (prev_cloud && cloud_mutex.try_lock ())
{
viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud");
viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_OPACITY, 0.15, "cloud");
pcl::visualization::PointCloudColorHandlerRGBField<PointT> color (prev_cloud);
if (!viewer->updatePointCloud<PointT> (prev_cloud, color,"cloud"))
viewer->addPointCloud<PointT> (prev_cloud, color,"cloud");
cloud_mutex.unlock ();
}
}
interface->stop ();
}
};
int
main ()
{
OpenNIOrganizedMultiPlaneSegmentation multi_plane_app;
multi_plane_app.run ();
return 0;
}
相关文章推荐
- 利用PCL开源库对桌子点云进行去除离群点并可视化显示
- OpenNi2+PCL显示彩色点云
- PCL中计算点云的法向量并显示
- PCL编程->三维彩色点云显示
- 修改的第一个PCL点云显示程序 显示两张点云
- PCL+QT+VS显示点云
- OpenCV——Opencv彩色图像在matplot中显示问题的解决
- SolidEdge 工程图中如何显示彩色工程图
- fpga控制vga显示彩色图片
- ROS_PCl_加载PCD点云数据文件与接收点云并保存
- SecureCRT vi彩色显示关键字
- 关于win32绘图出现无法显示彩色问题的解决
- 2 pcl读取pcd文件并显示
- 用VC++实现console程序显示彩色文本
- 谈谈人体骨骼坐标在彩色图像中显示
- 让debian在命令行终端显示彩色的文件及文件夹
- ros显示kinect v1彩色图和深度图问题
- OpenCV--鼠标响应Kinect彩色图像显示深度信息
- 关于CMD显示彩色文字
- 彩色图像直方图均衡化及颜色直方图显示 opencv实现 完整代码及详细注释