python-pcl安装和使用

2023-11-14

安装

因为工作中要进行点云数据的显示,因此要安装python-pcl,网上搜了很多教程,但是安装中还是遇到很多问题,这里把自己遇到的和可能遇到的问题总结一下。

环境:Ubuntu:14.04 python:2.7.6 pcl:1.7.0

网上的安装方法如下:

首先安装PCL模块,我们要使用python-pcl依赖于PCL模块:

sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
sudo apt-get update
sudo apt-get install libpcl-all

然后是安装其他的依赖模块:

sudo apt-get install python-pip
sudo apt-get install python-dev
sudo pip install Cython==0.25.2
sudo pip install numpy
sudo apt-get install git
git clone https://github.com/strawlab/python-pcl.git
cd python-pcl/
python setup.py build_ext -i
python setup.py install

最后两条命令在执行时提示权限问题需要加sudo,耗时较长,可能会遇到以下问题:

  1. 执行python setup.py build_ext -i时报错

    cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ [enabled by default]
    
    virtual memory exhausted: 无法分配内存
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    

    网上的解决方法是创建一个文件这样的,我试了以下,问题没有解决。

  2. 执行python setup.py install时报错

    cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ [enabled by default]
    
    #warning "Using deprecated NumPy API, disable it by " \
      ^
    pcl/
    
    x86_64-linux-gnu-gcc: internal compiler error: 已杀死 (program cc1plus)
    Please submit a full bug report,
    with preprocessed source if appropriate.
    See <file:///usr/share/doc/gcc-4.8/README.Bugs> for instructions.
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 4
    

    我是参考这里。修改setup.py文件,添加以下内容:

    import os
    from distutils.sysconfig import get_config_vars
     
    (opt,) = get_config_vars('OPT')
    os.environ['OPT'] = " ".join(
        flag for flag in opt.split() if flag != '-Wstrict-prototypes'
    )
    

    可是依然报错!!

  3. 执行cmake时提醒版本过低:

    按照这个进行升级,升级之后查看版本cmake --version又报错:

    CMake Error: Could not find CMAKE_ROOT !!!
    CMake has most likely not been installed correctly.
    Modules directory not found in
    /usr/local/bin
    段错误 (核心已转储)
    

    查找原因说要卸载重装,于是卸掉cmake又重装。再次查看cmake版本,提示bash: /usr/bin/cmake: 没有那个文件或目录。因为直接使用cmake系统会到默认的/usr/bin中去寻找,但是安装的cmake是在/usr/local/bin中,所以当然不会找到,解决方法是做一个链接即可:ln -s /usr/local/bin/cmake /usr/bin

  4. 执行make时报错:c++: internal compiler error: killed (program cc1plus),原因是系统没有交换分区, 编译过程中内存耗尽, 导致了编译中断,解决方式是增加一个交换分区:按照这个执行,命令前需要加sudo确保权限。然后再执行make命令。

上面就是按照网上的一些说明进行的,遇到问题就去查解决方法,但是最后也没装好python-pcl,于是转为按照官方的方法安装。

再次尝试

python-pclGitHub地址,下面对于不同操作系统、不同python版本需要安装的依赖和方法都有说明。我用的Ubuntu 14.04,根据这个说明我应该先安装:

Python 2.7.6, 3.4.0, 3.5.2
pcl 1.7.0
Cython <= 0.25.2

并且下面有安装pcl模块的命令:

sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl -y
sudo apt-get update -y
sudo apt-get install libpcl-all -y

然后是pip模块的安装:

pip install --upgrade pip
pip install cython==0.25.2
pip install numpy

最后是python-pcl模块的安装:

git clone https://github.com/strawlab/python-pcl.git  # 获取python-pcl,然后解压缩
cd python-pcl
# 执行下面的两条命令之前可以先阅读一下下面的问题
python setup.py build_ext -i
python setup.py install

最后的耗时较长,执行完就算是安装好了,首先进行一下测试,在python程序中import pcl,如果没有问题,就表示安装成功了。

后续问题:

安装完成后,运行例子,import pcl正常,但是pcl.pcl_visualization模块无法导入,按照这个尝试进行解决。

  1. 第556行根据vtk版本取消对应两行的注释,不清楚版本可以根据路径到对应目录下查看。取消第560和561行的注释:

    ext_args['include_dirs'].append('/usr/include/vtk-5.8')
    ext_args['library_dirs'].append('/usr/lib')
    
  2. 第615行if判断语句,根据PCL版本取消注释对应版本下的:

    Extension("pcl.pcl_visualization", ["pcl/pcl_visualization.pyx"], language="c++", **ext_args)
    

    然后运行python程序,依然报ImportError: No module named pcl_visualization的错误,重新执行最后两条命令后模块导入正常。

使用

主要是通过python-pcl读取PCD点云文件并显示,通过pcl.load(filename.pcd)可以读取PCD文件的点云数据,然后通过pcl.pcl_visualization将点云显示出来,具体代码可以查看一下网上的示例。

因为使用的数据是从雷达采集的数据生成的,有一些点的数值是异常的,在坐标系下的偏差很大,这样导致点云图上只形成了“两个点”。比如有10000个点,但是有1个点的值是有偏差的,这样在显示时,那9999个正常的点都聚集在了一起,于是可视化界面看到的就是“两个点”,因此在向PCD文件写入数据时要注意异常点的处理。

说道这里再介绍一下PCD文件,PCD文件是有固定格式的,包含头信息和数据信息,网上介绍的很详细,这里不再解释,只是要说一下里面的WIDTHHEIGHTPOINTS三个参数。

对于有序点云,WIDTH表示点云数据集的宽度,HEIGHT表示数据集的高度,即点云的行列数,二者的乘积就是点云中点的数量,也就是POINTS的值。

对于无序点云,WIDTH代表了点云中点的个数,和POINTS参数的值相同,HEIGHT设置为1。

在使用python-pcl读取点云PCD文件时,要保证WIDTHHEIGHT的值的乘积等于POINTS的值,并且和PCD文件中点的数量相等,否则会读取失败。在写PCD文件时,一般会先将点云的数目赋给WIDTHPOINTS,完成PCD文件头信息的内容。再写入数据信息时,异常点被处理掉不会写入,那么就会造成PCD文件点的数量和头信息的值不符,导致读取失败,要加以注意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python-pcl安装和使用 的相关文章

随机推荐

  • 指针数组和数组指针的区别

    指针数组和数组指针的区别 指针数组 array of pointers 即用于存储指针的数组 也就是数组元素都是指针 数组指针 a pointer to an array 即指向数组的指针 还要注意的是他们用法的区别 下面举例说明 int
  • java. gc原理面试_一文带你深入JAVA GC(垃圾回收机制)面试讲解!!!

    1 什么是GC 大白话说就是垃圾回收机制 内存空间是有限的 你创建的每个对象和变量都会占据内存 gc做的就是对象清除将内存释放出来 这就是GC要做的事 2 需要GC的区域 说起垃圾回收的场所 了解过JVM Java Virtual Mach
  • 扩频技术详解

    扩频是什么 扩频是一种信息处理传输技术 扩频技术是利用同欲传输数据 信息 无关的码对被传输信号扩展频谱 使之占有远远超过被传送信息所必需的最小带宽 扩频技术原理 在发端输入的信息先经信息调制形成数字信号 然后由扩频码发生器产生的扩频码序列去
  • Mac 上无法使用netstat的-p参数

    解决方法 改为使用lsof命令 例 lsof i P grep i listen 问题解析 如果像linux一样使用netstat tunlp 会收到如下报错 netstat option requires an argument p Us
  • js实现字母序号自动递增

    在实现一个考试管理系统的时候 可能会遇到试题的选项不是固定的情况 需要灵活的增加选项 选项自动递增 A B C D F 通过Unicode编码的方式可以灵活实现 本案例是基于layui表格实现的 如果是其他形式 可以修改部分代码 首先获取到
  • urlopen error [Errno 10061] 解决(附python 获取状态码)

    urllib2 URLError
  • 短连接和保持连接有什么区别,举个具体的网站开发的例子说明两者之间的区别

    短连接和保持连接是指客户端和服务器之间的网络连接模式 短连接是指客户端请求服务器后 发送完请求并接收到服务器的响应后 就立即关闭与服务器的连接 在下一次请求时 需要重新建立连接 这种模式下 服务器不需要在后台一直保持与客户端的连接 可以更好
  • 电阻分压器的阻值大小

    原文连接 https electronics stackexchange com questions 28897 how to choose value of resistor in voltage divider 在选择电阻作为分压器时
  • 一些常见warning的原因和解决方法

    在入职三周后 终于赶齐了接手项目落下两个月的项目 有了一些自己的空闲时间对项目进行整理 主要整理包括类目的整合 从原来一个系统文件夹下几百个文件整改为以MVC设计思想为原则的分文件夹整理类目 井然有序了很多 也不需要再用查找关键字来寻找想要
  • 单主机多网卡位于同一个网段

    一个设备有两张网卡 一个以太网卡 一个wifi无线网卡 如route命令输出的 eth0的IP地址是10 12 39 10 wlan0的IP地址是10 12 39 11 当eth0的RJ45接口的网线连上 wlan0的无线wifi不连上 发
  • Mysql语句整理大全

    综合使用 查询 目录 综合使用 书写顺序 select distinct from 表名 where 限制条件 group by 分组依据 having 过滤条件 order by limit 展示条数 执行顺序 from 查询 where
  • python爬虫对网页进行数据抓取

    1 拿到网页源代码 1 1 先看网址 和请求方式 1 2导入requests模块 1 3 发现爬不出来 是因为豆瓣做了伪装 1 3需要更换头部 1 4需要设置utf 8 要不然会乱码2 提取想要的数据 2 1 加载re模块 并且进行预加载
  • 相位误差补偿表LUT-创建

    LUT 1 相位误差补偿表 就是建立一个查找表对由gamma效应造成的投影仪光栅非正弦性进行一个补偿 2 相关资料可以看李中伟博士的论文 或者其他资料 3 步骤 3 1 获得理想相位图 用多步相移代替理想相位 3 2 获得实际相位图 3 3
  • 六、图形程序设计

    1 Swing概述 Swing是指 被绘制的 用户图形界面类 AWT是指像事件处理这样的窗口工具箱的底层机制 使用Swing的好处 Swing拥有一个丰富 便捷的用户界面元素合集 Swing对底层平台依赖的很少 因此与平台相关的bug很少
  • C语言编程 三角形图形绘制教程

    C语言编程 三角形图形绘制教程 三角形是计算机图形学中最基本的图形元素之一 也是很多图形和游戏中的重要组成部分 本文将介绍如何使用C语言编程绘制三角形 包括原始的点绘制方法和简单的三角形填充算法 C语言编程 三角形图形绘制教程 绘制三角形的
  • 高帧率手机 Flutter 列表慢慢拖动的时候会有明显的抖动

    高帧率手机上 Flutter列表慢慢拖动的时候会感觉到明显的抖动现象 比如 一加手机输入的运行频率为120hz 而显示屏的运行频率为90hz 滚动时 这种不匹配会导致性能下降 google团队通过以下的方法来解决此问题 void main
  • 在react中使用接口请求的方式

    在 React 中使用接口 数据交互的关键 React 是一个流行的 JavaScript 前端框架 用于构建交互式的用户界面 在实际开发中 我们经常需要与后端服务器进行数据交互 这就需要使用接口来获取和发送数据 本文将介绍在 React
  • 网络安全协议之IPSec协议

    简介 IPSec即IP安全协议 网络层在传输的时候可能会遭到攻击 这时我们需要用IPSec协议来进行保护 就像使用SSL协议来保护传输层一样 IPSec经常用于建立虚拟专用网络 VPN 它通过对IP数据包进行加密和认证 来提供两台计算机之间
  • 热力图(Thermodynamic diagram)绘制MATLAB代码详解

    目录 Preface 1 表格型热力图 Tabular thermal diagram 相关系数矩阵热力图 Thermal diagram of correlation coefficient matrix Thermal diagram
  • python-pcl安装和使用

    安装 因为工作中要进行点云数据的显示 因此要安装python pcl 网上搜了很多教程 但是安装中还是遇到很多问题 这里把自己遇到的和可能遇到的问题总结一下 环境 Ubuntu 14 04 python 2 7 6 pcl 1 7 0 网上