Python3导入cv_bridge

本文介绍了在ROSMelodic环境下,由于cv_bridge通常依赖于Python2,如何通过手动克隆并安装vision_opencv库,调整CMake配置,以实现从Python2向Python3的迁移,最终成功安装以支持Python3的cv_bridge。

在用ROS Melodic的时候,调用cv_bridge常常使用的是python2的,无法通过python3调用

解决方法:
1.克隆代码准备手动安装

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

2.安装

cd vision_opencv/cv_bridge
mkdir build 
cd  build 

cmake .. -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so
-DCMAKE_INSTALL_PREFIX=/opt/ros/melodic/share

make 
sudo make install
### 使用 `rosbag` 和 `cv_bridge` 进行 ROS 消息与 OpenCV 图像之间转换 为了实现 ROS 消息与 OpenCV 图像间的相互转换,可以利用 Python 中的 `rosbag` 库来读取或写入 bag 文件中的数据,并通过 `cv_bridge` 将传感器消息(如图像)转换成 OpenCV 的格式。 #### 安装依赖库 确保安装了必要的软件包: ```bash sudo apt-get install ros-noetic-cv-bridge python3-opencv ``` 对于不同的 ROS 版本,请替换命令中的版本号为对应的名称,比如 noetic 或 melodic[^1]。 #### 导入库 在脚本开头导入所需的模块: ```python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge, CvBridgeError import cv2 import rosbag ``` #### 创建桥接对象 创建一个用于处理图像转换的对象实例: ```python bridge = CvBridge() ``` #### 从 Bag 文件读取消息并显示图片 遍历 bag 文件内的每一条记录,当遇到特定主题的消息时执行相应的操作: ```python with rosbag.Bag('test.bag', 'r') as bag: for topic, msg, t in bag.read_messages(topics=['/camera/image_raw']): try: # Convert the ROS image message to an OpenCV-compatible format. cv_image = bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8') # Display the converted image using OpenCV's imshow function. cv2.imshow("Image window", cv_image) cv2.waitKey(0) except CvBridgeError as e: print(e) ``` 上述代码片段展示了如何打开名为 test.bag 的文件,并从中提取 `/camera/image_raw` 主题下的所有图像帧。这些帧被转化为适合 OpenCV 处理的形式后,在窗口中展示出来。 #### 将 OpenCV 图片保存到 Bag 文件 如果希望把经过修改后的 OpenCV 图像存回新的 bag 文件,则可按照如下方式构建新消息并将其加入袋子里: ```python out_bag = rosbag.Bag('output.bag', 'w') try: img = cv2.imread('/path/to/image.png') stamp = rospy.Time.now() # Create timestamp # Convert from CV image back into a ROS image message. ros_img_msg = bridge.cv2_to_imgmsg(img, encoding="passthrough") out_bag.write("/new_topic_name", ros_img_msg, stamp) finally: out_bag.close() ``` 这段程序会先加载一张本地存储的照片作为输入源,接着调用 `cv2_to_imgmsg()` 方法完成反向变换过程——即由 OpenCV 格式的数组转变为标准的 ROS 图像消息形式;最后再把这些信息连同时间戳一起追加至指定的主题下。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值