点云pcd保存

编程入门 行业动态 更新时间:2024-10-17 09:47:09

点云<a href=https://www.elefans.com/category/jswz/34/1728625.html style=pcd保存"/>

点云pcd保存

pcl中保存点云的接口是  savePCDFileASCII、savePCDFileBinaryCompressed。

一般为了节省空间,我是用 二进制压缩模式比较多。

实现的效果如下:

 保存为 二进制

 保存为压缩二进制

实际内容如下:

文本模式

 二进制模式

 

 二进制压缩模式

实现klib的插件代码如下:

bool write_pcd(const std::string& fileName, const KArbit& cloud)
{if (auto d = a2T<PointCloudXYZPtr>(&cloud))				return io::savePCDFile(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZIPtr>(&cloud))			return io::savePCDFile(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZRGBPtr>(&cloud))			return io::savePCDFile(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZRGBAPtr>(&cloud))			return io::savePCDFile(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZLPtr>(&cloud))			return io::savePCDFile(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZRGBLPtr>(&cloud))			return io::savePCDFile(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZNormalPtr>(&cloud))		return io::savePCDFile(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZRGBNormalPtr>(&cloud))	return io::savePCDFile(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZINormalPtr>(&cloud))		return io::savePCDFile(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZLNormalPtr>(&cloud))		return io::savePCDFile(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloud2Ptr>(&cloud))				return io::savePCDFile(fileName, *(*d)) >= 0;return false;
}bool write_pcd_binary(const std::string & fileName, const KArbit &cloud)
{if (auto d = a2T<PointCloudXYZPtr>(&cloud))				return io::savePCDFile(fileName, *(*d), true) >= 0;if (auto d = a2T<PointCloudXYZIPtr>(&cloud))			return io::savePCDFile(fileName, *(*d), true) >= 0;if (auto d = a2T<PointCloudXYZRGBPtr>(&cloud))			return io::savePCDFile(fileName, *(*d), true) >= 0;if (auto d = a2T<PointCloudXYZRGBAPtr>(&cloud))			return io::savePCDFile(fileName, *(*d), true) >= 0;if (auto d = a2T<PointCloudXYZLPtr>(&cloud))			return io::savePCDFile(fileName, *(*d), true) >= 0;if (auto d = a2T<PointCloudXYZRGBLPtr>(&cloud))			return io::savePCDFile(fileName, *(*d), true) >= 0;if (auto d = a2T<PointCloudXYZNormalPtr>(&cloud))		return io::savePCDFile(fileName, *(*d), true) >= 0;if (auto d = a2T<PointCloudXYZRGBNormalPtr>(&cloud))	return io::savePCDFile(fileName, *(*d), true) >= 0;if (auto d = a2T<PointCloudXYZINormalPtr>(&cloud))		return io::savePCDFile(fileName, *(*d), true) >= 0;if (auto d = a2T<PointCloudXYZLNormalPtr>(&cloud))		return io::savePCDFile(fileName, *(*d), true) >= 0;if (auto d = a2T<PointCloud2Ptr>(&cloud))				return pcl::PCDWriter().writeBinary(fileName, *(*d)) >= 0;return false;
}bool write_pcd_binary_compressed(const std::string & fileName, const KArbit &cloud)
{if (auto d = a2T<PointCloudXYZPtr>(&cloud))				return io::savePCDFileBinaryCompressed(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZIPtr>(&cloud))			return io::savePCDFileBinaryCompressed(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZRGBPtr>(&cloud))			return io::savePCDFileBinaryCompressed(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZRGBAPtr>(&cloud))			return io::savePCDFileBinaryCompressed(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZLPtr>(&cloud))			return io::savePCDFileBinaryCompressed(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZRGBLPtr>(&cloud))			return io::savePCDFileBinaryCompressed(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZNormalPtr>(&cloud))		return io::savePCDFileBinaryCompressed(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZRGBNormalPtr>(&cloud))	return io::savePCDFileBinaryCompressed(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZINormalPtr>(&cloud))		return io::savePCDFileBinaryCompressed(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloudXYZLNormalPtr>(&cloud))		return io::savePCDFileBinaryCompressed(fileName, *(*d)) >= 0;if (auto d = a2T<PointCloud2Ptr>(&cloud))				return pcl::PCDWriter().writeBinaryCompressed(fileName, *(*d)) >= 0;return false;
}struct KPclOutCldPcd : KPlugBase
{bool skipEmpty = true;string saveType = "pcd_binary_compressed";KPclOutCldPcd(){addProp("modelFile").setType(PropTypeSaveFile).setFileFilter("(*.pcd);;(*.*)").setEmptyIndex(1);addProp("saveType").setType(PropTypeSelect).setValueAddr(&saveType).setItems({ "pcd","pcd_binary","pcd_binary_compressed" });addProp("skipEmpty").setType(PropTypeBool).setValueAddr(&skipEmpty);}int __exec(const KArbit& src, KArbit& dst) override{auto& aL = a2list(src);auto& cld =  aL[0];CastType(fName, string, aL[1]);if (!skipEmpty && cld.empty())return false;if (saveType == "pcd")write_pcd(fName, cld);else if (saveType == "pcd_binary")write_pcd_binary(fName, cld);elsewrite_pcd_binary_compressed(fName, cld);arbit_set_value(dst, fName);return true;}
};

更多推荐

点云pcd保存

本文发布于:2024-02-12 05:26:19,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1686292.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:pcd

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!