29 #include <type_traits>
31 #include <pcl/common/colors.h>
32 #include <pcl/common/io.h>
33 #include <pcl/io/pcd_io.h>
34 #include <pcl/point_cloud.h>
35 #include <pcl/point_types.h>
37 #include <VisionX/interface/core/DataTypes.h>
46 template <
typename Po
intCloudPtrT>
47 std::tuple<uint8_t, uint8_t, uint8_t>
50 const uint8_t r = rand() % 255;
51 const uint8_t g = rand() % 255;
52 const uint8_t b = rand() % 255;
54 for (
auto& p : segment->points)
61 return std::make_tuple(r, g, b);
66 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr targetCloudPtr)
68 pcl::copyPointCloud(*sourceCloudPtr, *targetCloudPtr);
70 std::map<uint32_t, float> colorMap;
72 for (
size_t i = 0; i < sourceCloudPtr->points.size(); i++)
74 pcl::PointXYZL p = sourceCloudPtr->points[i];
76 if (!colorMap.count(p.label))
78 pcl::RGB
c = pcl::GlasbeyLUT::at(p.label % pcl::GlasbeyLUT::size());
79 colorMap.insert(std::make_pair(p.label,
c.rgb));
82 targetCloudPtr->points[i].rgb = colorMap[p.label];
96 template <
class Po
intCloudT>
99 std::map<uint32_t, pcl::PointIndices>& labelIndicesMap,
102 for (
size_t i = 0; i < labeledCloud.points.size(); i++)
104 uint32_t currentLabel = labeledCloud.points[i].label;
106 if (excludeZero && currentLabel == 0)
114 labelIndicesMap[currentLabel].indices.push_back(
static_cast<int>(i));
138 template <
class LabeledPo
intCloudPtrT>
141 std::map<uint32_t, pcl::PointIndices>& labelIndicesMap,
142 bool excludeZero =
true)
149 template <
class Po
intCloudT>
152 std::map<uint32_t, pcl::PointIndices>& labelIndicesMap,
153 bool excludeZero =
true)
159 template <
class Po
intCloudT>
160 std::map<uint32_t, pcl::PointIndices>
163 std::map<uint32_t, pcl::PointIndices> labelIndicesMap;
165 return labelIndicesMap;