gpt4 book ai didi

c++ - 从 PointCloud 到 Mat 的转换

转载 作者:太空宇宙 更新时间:2023-11-04 14:08:50 25 4
gpt4 key购买 nike

假设我初始化了一个点云。我想将其 RGB channel 存储在 opencv 的 Mat 数据类型中。我该怎么做?

pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);   //Create a new cloud
pcl::io::loadPCDFile<pcl::PointXYZRGBA> ("cloud.pcd", *cloud);

最佳答案

我的理解是否正确,您只对点云的 RGB 值感兴趣而不关心它的 XYZ 值?

然后你可以这样做:

pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>); 
//Create a new cloud
pcl::io::loadPCDFile<pcl::PointXYZRGBA> ("cloud.pcd", *cloud);

cv::Mat result;

if (cloud->isOrganized()) {
result = cv::Mat(cloud->height, cloud->width, CV_8UC3);

if (!cloud->empty()) {

for (int h=0; h<result.rows; h++) {
for (int w=0; w<result.cols; w++) {
pcl::PointXYZRGBA point = cloud->at(w, h);

Eigen::Vector3i rgb = point.getRGBVector3i();

result.at<cv::Vec3b>(h,w)[0] = rgb[2];
result.at<cv::Vec3b>(h,w)[1] = rgb[1];
result.at<cv::Vec3b>(h,w)[2] = rgb[0];
}
}
}
}

我认为足以展示基本思想。

但这只有在你的点云是有组织的情况下才有效:

An organized point cloud dataset is the name given to point clouds that resemble an organized image (or matrix) like structure, where the data is split into rows and columns. Examples of such point clouds include data coming from stereo cameras or Time Of Flight cameras. The advantages of a organized dataset is that by knowing the relationship between adjacent points (e.g. pixels), nearest neighbor operations are much more efficient, thus speeding up the computation and lowering the costs of certain algorithms in PCL. (Source)

关于c++ - 从 PointCloud 到 Mat 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15716900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com