cv_bridge报错: ImportError: dynamic module does not define module export function (PyInit_cv_bridge)

当运行Python文件时出现如下报错:

Traceback (most recent call last): File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 658, in _load_unlocked File "<frozen importlib._bootstrap>", line 571, in module_from_spec File "<frozen importlib._bootstrap_external>", line 922, in create_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)
.....
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)

检查原因,是因为在ROS中默认使用python2,rospy的cv_bridge默认也是python2版本的,在使用python3中导入cv_brdige时会报出以上错误.

解决方法:

需要重新编译一个用于python3版本的cv_bridge包,即可:

步骤如下:

1,安装相关依赖包

sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-kinetic-cv-bridge

2.新建一个工作空间

mkdir -p ~/python3_ws/src
cd ~/python3_ws/src
catkin_init_workspace 
cd ..
catkin_make
catkin_make install 

3.进入src目录,下载cv_bridge功能包

git clone -b kinetic https://github.com/ros-perception/vision_opencv.git

4.退出src,编译,注意配置本地python环境,虚拟环境编译无效,注意这里ubuntu16.04Python版本为3.5

cd ..
catkin_make -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.5m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so #寻找对应位置
catkin config --install

5.在编译时,若遇到如下报错:

Errors     << cv_bridge:cmake /home/zhangman/VisionTracking/logs/cv_bridge/build.cmake.002.log
CMake Error at /usr/share/cmake-3.5/Modules/FindBoost.cmake:1677 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.58.0

  Boost include path: /usr/include

  Could not find the following Boost libraries:

          boost_python3

  No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the
  directory containing Boost libraries or BOOST_ROOT to the location of
  Boost.
Call Stack (most recent call first):
  CMakeLists.txt:11 (find_package)

根据错误提示,boost_python3库找不到,根据网上提示,在/usr/lib/x86_64-linux-gnu文件夹中查看相关boost_python库,如图所示,发现没有python3的相关库,只有python-py35的库。可能是因为安装的时候有多个版本的python导致命名不是python,解决方案是建立python-py35到python的软连接。如果没找到python-py35而是找到了python-py3x,解决方案相同,建立软连接即可。

//到libboost_python-py35所在文件夹下,建立软连接
cd /usr/lib/x86_64-linux-gnu/
sudo ln -s libboost_python-py35.so libboost_python3.so
sudo ln -s libboost_python-py35.a libboost_python3.a

6.以后就在当前工作空间下运行需要使用python3版本cv_bridge的代码

注意:运行前要执行source devel/setup.bash --extend,表示将cv_bridge的扩展环境添加到当前虚拟环境中,这样就可以在XXX虚拟环境中使用cv_bridge

#进入你的工作空间
cd ./python_ws
#进入你的虚拟环境
conda activate xxx
#导入环境配置
source devel/setup.bash --extend
#进入python测试
python
from cv_bridge.boost.cv_bridge_boost import getCvType

若无报错,即解决问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值