ubuntu20.04安装liblas和pcl库实现对pcd文件转las文件

由于前面使用pdal库直接使用终端命令

sudo apt install pdal

pcl_pcd2ply input.pcd temp.ply

padal translate temp.ply output.las

运行pcl_pcd2ply显示无法转换命令,假设已经安装ros下面有自带pcl库。

选择一键安装pcl


sudo apt-get install libpcl-dev

ubuntu对应版本如下

命令找不到提示如下:

继续安装pcl-tools

sudo apt install pcl-tools

成功转换

尽管liblas作者提示已经不在维护,取而代之是pdal。但是考虑到c++代码转换效率快,仍使用liblas进行转换。


 安装boost 1.71.0

https://www.boost.org/users/history/

 解压文件包

tar -zxvf filename.tar.gz

进入boost文件:

cd ../boost_1_71_0

然后输入:

./bootstrap.sh
./b2
./b2 headers

测试是否安装成功:(新建test.cpp 使用im进行编辑cpp文件 按i是编辑 esc是退出编辑 :wq 保存退出)

touch test.cpp
vim test.cpp

在test.cpp输入下面代码:

#include<iostream>
#include<boost/bind.hpp>
using namespace std;
using namespace boost;
int fun(int x,int y){return x+y;}
int main(){
    int m=1;int n=2;
    cout<<boost::bind(fun,_1,_2)(m,n)<<endl;
    return 0;
}

编译test.cpp

g++ test.cpp -o test

运行test.cpp

./test

输出结果为3,安装成功。


安装liblas1.8.1

https://liblas.org/download.html

解压文件

tar -jxvf libLAS-1.8.1.tar.bz2
cd ../libLAS-1.8.1.tar.bz2
mkdir build
cd build
cmake ..
make 
sudo make install

编译百分百通过,使用终端查看las信息


c++转换代码(pcd转las)

#include <liblas/liblas.hpp>
#include <iostream>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

void writeLasFromPointCloud3(const char* strInputPointCloudName, const char* strOutLasName)
{
    std::ofstream ofs(strOutLasName, std::ios::out | std::ios::binary);
    if (!ofs.is_open())
    {
        std::cout << "Error: unable to open file las....." << std::endl;
        return;
    }
    liblas::Header header;
    header.SetVersionMajor(1);
    header.SetVersionMinor(2);
    header.SetDataFormatId(liblas::PointFormatName::ePointFormat3); // This format supports color
    header.SetScale(0.001, 0.001, 0.001);

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::io::loadPCDFile(strInputPointCloudName, *cloud);
    std::cout << "Total points: " << cloud->points.size() << std::endl;

    liblas::Writer writer(ofs, header);
    liblas::Point point(&header);

    for (size_t i = 0; i < cloud->points.size(); i++)
    {
        double x = cloud->points[i].x;
        double y = cloud->points[i].y;
        double z = cloud->points[i].z;
        point.SetCoordinates(x, y, z);
        writer.WritePoint(point);
    }

    // Update header with correct point count after writing all points
    header.SetPointRecordsCount(cloud->points.size());
    writer.SetHeader(header);
}

int main()
{
    char strInputPointCloudName[] = "bunny.pcd";
    char strOutLasName[] = "bunny.las";
    writeLasFromPointCloud3(strInputPointCloudName, strOutLasName);

    return 0;
}

CmakeList.txt

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(pcd2las)
find_package(PCL 1.10 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
include_directories(/usr/local/include)
 
link_directories(${PCL_LIBRARY_DIRS})
link_directories(/usr/local/lib)
add_definitions(${PCL_DEFINITIONS})
		
add_executable(pcd2las test.cpp)

target_link_libraries(pcd2las ${PCL_LIBRARIES})

# target_link_libraries (pcd2las liblas.so )
target_link_libraries(pcd2las liblas.so.2.4.0)
# target_link_libraries (pcd2las liblas_c.so )
# target_link_libraries (pcd2las liblas_c.so.2.4.0 )
# target_link_libraries (pcd2las  liblas_c.so.3 )
 
 

上面的liblas路径直接写了固定路径,可根据自身环境修改,或者使用宏

转换成功:

 

文章参考:

https://blog.csdn.net/weixin_43779943/article/details/102639516?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-1-102639516-blog-118978436.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-1-102639516-blog-118978436.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=1icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_43779943/article/details/102639516?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromBaidu~Ctr-1-102639516-blog-118978436.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromBaidu~Ctr-1-102639516-blog-118978436.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=1https://www.cnblogs.com/lovebay/p/9298288.htmlicon-default.png?t=O83Ahttps://www.cnblogs.com/lovebay/p/9298288.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值