# -*- coding: utf-8 -*- # http://pointclouds.org/documentation/tutorials/min_cut_segmentation.php #pcl::PointCloud ::Ptr cloud (new pcl::PointCloud ); # if ( pcl::io::loadPCDFile ("min_cut_segmentation_tutorial.pcd", *cloud) == -1 ) # { # std::cout << "Cloud reading failed." << std::endl; # return (-1); # } cloud = pcl.load('./examples/pcldata/tutorials/min_cut_segmentation_tutorial.pcd') # pcl::IndicesPtr indices (new std::vector ); # pcl::PassThrough pass; # pass.setInputCloud (cloud); # pass.setFilterFieldName ("z"); # pass.setFilterLimits (0.0, 1.0); # pass.filter (*indices); pass = cloud.make_passthrough_filter() pass.set_filter_field_name('z') pass.set_filter_limits(0.0, 1.0) indices = pass.filter() # pcl::MinCutSegmentation seg; # seg.setInputCloud (cloud); # seg.setIndices (indices); seg = cloud.make_MinCutSegmentation() # pcl::PointCloud::Ptr foreground_points(new pcl::PointCloud ()); foreground_points = pcl.PointCloud() # pcl::PointXYZ point; # point.x = 68.97; # point.y = -18.55; # point.z = 0.57; # foreground_points->points.push_back(point) # seg.setForegroundPoints (foreground_points); # seg.setSigma (0.25); # seg.setRadius (3.0433856); # seg.setNumberOfNeighbours (14); # seg.setSourceWeight (0.8); # std::vector clusters; # seg.extract (clusters); # std::cout << "Maximum flow is " << seg.getMaxFlow () << std::endl; pcl::PointCloud ::Ptr colored_cloud = seg.getColoredCloud (); # pcl::visualization::CloudViewer viewer ("Cluster viewer"); # viewer.showCloud(colored_cloud); # while (!viewer.wasStopped ()) # { # } return (0);