参考:极简方案写在前面:可以解决90% cv_bridge与python3适配的问题。 如果解决了您的问题,点个赞呗 一、问题1,rospy安装当主函数使用python3,并加载使用ros时,会报错。因为一般的ros库基于python2的。报错如下: Traceback…https://zhuanlan.zhihu.com/p/652106267
参考方案之前在使用ubuntu16.04时发现ROS下的cv_bridge类仅支持python2,在做项目时又需要在python3中进行,尝试把这个坑填了一下,供大家借鉴。(当然现在貌似ubuntu20.04 ROS都支持python3了) 1. 创建工作空间mkdir cat…https://zhuanlan.zhihu.com/p/407517632网络上很多文章,都是写的noetic以下版本,安装cv_bridge插件,出现的种种问题,这是由于,ros在之前的版本对python3的支持不够好,noetic版本开始,加强了对于python3的支持。
废话不多说,直接开始
基础环境,ubuntu20.04,Ros(noetic,划重点),不知道怎么安装Ros,请参考鱼香Ros一键安装脚本
1. 创建工作空间
mkdir -p ~/testVision_OpenCV/srccd testVision_OpenCV/src
2.编译代码并安装
git clone https://github.com/ros-perception/vision_opencv.git src/vision_opencv#进入到clone的项目
cd vision_opencv#切换到对应的分支,重要!!!
git checkout -b noetic remotes/origin/noeticcd ~/testVision_OpenCV && catkin_make开始执行编译,不出问题直接可以编译成功
3.虚拟环境调用(不用虚拟环境,可以忽略这一步)
virtualenv pyenv -p /usr/bin/python3source pyenv/bin/activate#虚拟环境内安装依赖,装完后,可以愉快的在虚拟环境中进行开发了
pip install catkin-tools
pip install rospkg
4.测试代码(读取video并发布)
python"># coding=utf-8
import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
# import customCvBridge as CvBridge
import cv2def video_publisher():# 初始化ROS节点rospy.init_node('video_publisher', anonymous=True)# 创建图像发布者image_pub = rospy.Publisher('rgb_topic', Image, queue_size=10)# # 创建CvBridge对象bridge = CvBridge()# 打开视频文件video = cv2.VideoCapture('./test.mp4')# 检查视频是否成功打开if not video.isOpened():rospy.logerr('无法打开视频文件')return# 循环读取视频帧并发布rate = rospy.Rate(30) # 设置发布频率为30帧/秒while not rospy.is_shutdown():ret, frame = video.read()if ret:# 将帧转换为ROS图像消息image_msg = bridge.cv2_to_imgmsg(frame)# 发布图像消息image_pub.publish(image_msg)else:# 视频结束时退出循环breakrate.sleep()# 关闭视频文件video.release()if __name__ == '__main__':try:video_publisher()except rospy.ROSInterruptException:pass