ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type

问题描述:

Ubuntu16.04 安装了ROS Kinetic之后Python3不能import cv2

据了解在,python中是通过cv2.so调用opencv的库的:

  • Python调用opencv的原理是:opencv编译出共享库文件,python把这个共享库文件作为一个模块加载并使用。通俗点就是,编译opencv的时候开启python接口选项,编译好了会产生cv2.so(linux下)或者cv2.pyd(windows下)这个共享库文件,python代码中import这个cv2就可以用了。为了能正确import它,往往需要把cv2.so放在python找包能找到的路径下,或者修改PYTHONPATH环境变量让它包含cv2.so所在路径。

可以看出这个问题是由ROS添加/opt/ros/kinetic/lib/python2.7/dist-packages到python路径引起的。

当使用命令激活ROS时,实际上会发生这种情况source /opt/ros/kinetic/setup.bash。这行通常会添加到bashrc文件的末尾/home/username/.bashrc。

这样就可以正确使用python3 opencv包,你仍然可以运行source /opt/ros/kinetic/setup.bash使用ROS。但是,这确实意味着无法在同一环境中使用ROS和python3

就是说,在用python3运行opencv3 即import cv2的时候需要把.bashrc 或者 .zshrc中的有关ros的soure都注释掉,才可以正常运行

处理方法


(1)第一种方法 
需要在~/.bashrc文件中增加一行命令,操作步骤为:

cd ~
gedit .bashrc或者使用vim .bashrc
部分处理方法是在.bashrc文件中把source /opt/ros/kinetic/setup.bash添加#符号注释掉,但这样势必会造成再次使用ROS时又需要把注释#去掉,这确实意味着无法在同一环境中使用ROS和python3

就是说,在用python3运行opencv3 即import cv2的时候需要把.bashrc 或者 .zshrc中的有关ros的soure都注释掉,才可以正常运行。

因此查找相关的材料可以在打开的.bashrc文件中的最后增加如下一行:

export PYTHONPATH="/home/panda/.local/lib/python3.5/site-packages":$PYTHONPATH

注意:上面的路径中的panda需要换成你自己的用户名 
PYTHONPATH后的/home/panda/.local/路径内容需要根据自己的安装路径来来进行更改。但是最后得出的结果可能会和之前提到的那种方法产生一样,即运行ROS时需要注释掉这行代码,运行非ROS时需要加上这行代码。而接下来的第二种方法会在python文件中进行处理。

(2)第二种方法 
因为是受ROS安装的影响,ROS安装之后会在python pyth中加入:

'/opt/ros/kinetic/lib/python2.7/dist-packages'


而为了解决此问题,可以在需要运行的python文件(即使用import cv2的python文件)中,添加以下代码:

import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')

通过这两行代码可以把ROS写入path中的路径给清除,进行可以import anaconda中的cv2包。

注:通过此方法再次import cv2时,问题得以解决,不再报错,但此方法并不一定可以保证在所有的情况下都适用,但还是值得一试滴。

  (3) 第三种方法

给cv2.so改个名字
 

cd /opt/ros/kinetic/lib/python2.7/dist-packages/
sudo mv cv2.so cv2_ros.so

没有尝试过

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值