更新
2024.7.12 新博客已经解决python3下cv_bridge报错:
ubuntu18.04+ROS-melodic配置支持python3的cv_bridge-CSDN博客
摘要
使用realsense viewer进行bag文件record。项目使用的python3,但在ros版本下,进行bag文件读取报错,查阅相关资料,发现是ros不兼容python3。尝试网上多种方法,无法解决。更换python2.7,解决。
记录一下,供自己和大家学习。
版本:子系统ubuntu18.04、ros melodic、IDE:pycharm
读取bag文件代码
import roslib
import rosbag
import rospy
import cv2
import os
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
#
rgb_path = './rgb/' # absolute path of extracted rgb images
depth_path = './depth/' # absolute path of extracted depth images
if not os.path.exists(rgb_path):
os.makedirs(rgb_path)
if not os.path.exists(depth_path):
os.makedirs(depth_path)
bridge = CvBridge()
bag = rosbag.Bag('test.bag', 'r') # path for the bag
for topic, msg, t in bag.read_messages():
if topic == "/device_0/sensor_0/Depth_0/image/data":
try:
cv_image = bridge.imgmsg_to_cv2(msg, "mono16") # Z16对应 mono16
timestr = "%.8f" % msg.header.stamp.to_sec()
image_name = timestr + '.png'
cv2.imwrite(depth_path + image_name, cv_image)
print(depth_path + image_name)
except CvBridgeError as e:
print(e)
if topic == "/device_0/sensor_1/Color_0/image/data":
try:
cv_image = bridge.imgmsg_to_cv2(msg, "bgr8")
timestr = "%.8f" % msg.header.stamp.to_sec()
image_name = timestr + '.png'
cv2.imwrite(rgb_path + image_name, cv_image)
print(rgb_path + image_name)
except CvBridgeError as e:
print(e)
bag.close()
python3环境报错
Failed to load Python extension for LZ4 support. LZ4 compression will not be available.
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)
原因:lz4和cv_bridge与python3不兼容
他人解决方法
安装roslz4和在python3下自行编译cv_bridge,网上有说明,略。
多次均尝试后无法使用。
解决方法-python2
新建一个pyhcarm项目和虚拟环境(python2.7),用于读取bag包。
安装的包环境如下:
Package Version
----------------------------- -------------------
actionlib 1.12.1
angles 1.9.12
bondpy 1.8.5
camera-calibration 1.15.2
camera-calibration-parsers 1.11.13
catkin 0.7.29
catkin-pkg 0.5.2
certifi 2020.6.20
controller-manager 0.18.4
controller-manager-msgs 0.18.4
cv-bridge 1.13.1
diagnostic-analysis 1.9.7
diagnostic-common-diagnostics 1.9.7
diagnostic-updater 1.9.7
distro 1.6.0
docutils 0.18.1
dynamic-reconfigure 1.6.5
gazebo-plugins 2.8.7
gazebo-ros 2.8.7
gencpp 0.6.6
geneus 2.2.6
genlisp 0.4.16
genmsg 0.5.17
gennodejs 2.0.1
genpy 0.6.16
image-geometry 1.13.1
interactive-markers 1.11.5
joint-state-publisher 1.12.15
kdl-parser-py 1.13.3
laser-geometry 1.6.7
message-filters 1.14.13
numpy 1.16.5
pip 19.3.1
pycryptodomex 3.10.1
pyparsing 2.4.7
python-dateutil 2.9.0.post0
python-gnupg 0.4.6
python-qt-binding 0.4.4
PyYAML 5.4.1
qt-dotgraph 0.4.2
qt-gui 0.4.2
qt-gui-cpp 0.4.2
qt-gui-py-common 0.4.2
resource-retriever 1.12.7
rosbag 1.14.13
rosboost-cfg 1.14.9
rosclean 1.14.9
roscreate 1.14.9
rosgraph 1.14.13
roslaunch 1.14.13
roslib 1.14.9
roslint 0.11.2
roslz4 1.14.13
rosmake 1.14.9
rosmaster 1.14.13
rosmsg 1.14.13
rosnode 1.14.13
rosparam 1.14.13
rospkg 1.2.9
rospy 1.14.13
rosservice 1.14.13
rostest 1.14.13
rostopic 1.14.13
rosunit 1.14.9
roswtf 1.14.13
rqt-action 0.4.9
rqt-bag 0.5.1
rqt-bag-plugins 0.5.1
rqt-console 0.4.9
rqt-dep 0.4.9
rqt-graph 0.4.11
rqt-gui 0.5.3
rqt-gui-py 0.5.3
rqt-image-view 0.4.17
rqt-launch 0.4.8
rqt-logger-level 0.4.8
rqt-moveit 0.5.10
rqt-msg 0.4.8
rqt-nav-view 0.5.7
rqt-plot 0.4.13
rqt-pose-view 0.5.8
rqt-publisher 0.4.8
rqt-py-common 0.5.3
rqt-py-console 0.4.8
rqt-reconfigure 0.5.4
rqt-robot-dashboard 0.5.7
rqt-robot-monitor 0.5.14
rqt-robot-steering 0.5.10
rqt-runtime-monitor 0.5.7
rqt-rviz 0.7.0
rqt-service-caller 0.4.8
rqt-shell 0.4.9
rqt-srv 0.4.8
rqt-tf-tree 0.6.0
rqt-top 0.4.8
rqt-topic 0.4.11
rqt-web 0.4.8
rviz 1.13.30
sensor-msgs 1.12.8
setuptools 44.0.0.post20200106
six 1.16.0
smach 2.0.3
smach-ros 2.0.3
smclib 1.8.5
tf 1.12.1
tf-conversions 1.12.1
tf2-geometry-msgs 0.6.5
tf2-kdl 0.6.5
tf2-py 0.6.5
tf2-ros 0.6.5
topic-tools 1.14.13
urdfdom-py 0.4.6
wheel 0.37.1
xacro 1.13.20
可正常读取和保存image!!!