opencv版本为4.2,ubantu20.04,ros为noetic,使用ROS、vscode、opencv编写两个代码,确定视频地址后,把视频转为rosbag进行发布,在接收端接收图像,并实时拼接图像发布融合大图并显示和保存。(视频转长图,视频是一个平滑移动的视频,转为一张长图)
2条回答 默认 最新
关注引自强大而免费的微信小程序:皆我百晓生。如有帮助,还望采纳。
下面是一个使用ROS和OpenCV读取rosbag文件中的图像消息,并进行拼接、显示和保存的示例代码:
import rosbag import cv2 from sensor_msgs.msg import Image from cv_bridge import CvBridge import numpy as np bag_file = "path_to_your_rosbag.bag" # 替换为你的rosbag文件路径 output_file = "path_to_your_output_image.jpg" # 替换为输出图像的保存路径 # 定义回调函数,处理图像消息 def image_callback(msg): bridge = CvBridge() cv_image = bridge.imgmsg_to_cv2(msg, desired_encoding='passthrough') cv_image = cv2.cvtColor(cv_image, cv2.COLOR_BGR2RGB) images.append(cv_image) # 读取rosbag文件 bag = rosbag.Bag(bag_file) # 定义图像消息的话题名称 image_topic = "/your_image_topic" # 替换为你的图像消息话题名称 # 遍历rosbag文件并处理图像消息 images = [] for topic, msg, t in bag.read_messages(topics=[image_topic]): image_callback(msg) # 垂直拼接图像 concatenated_image = np.vstack(images) # 显示拼接后的图像 cv2.imshow("Concatenated Image", concatenated_image) cv2.waitKey(0) cv2.destroyAllWindows() # 保存拼接后的图像 cv2.imwrite(output_file, concatenated_image) # 关闭rosbag文件 bag.close()确保将
path_to_your_rosbag.bag替换为你的rosbag文件的路径,并将path_to_your_output_image.jpg替换为你希望保存拼接图像的路径。此代码假设图像消息的编码格式为BGR,如果图像消息的编码格式不是BGR,请相应地调整代码中的
desired_encoding参数。在代码中,我们使用了
sensor_msgs/Image消息和CvBridge库来在ROS和OpenCV之间进行图像数据的转换。我们遍历rosbag文件,找到图像消息,并将它们转换为OpenCV可用的格式进行后续处理。最后,我们将拼接后的图像显示出来,并保存为指定的文件。
解决评论 打赏 举报无用 1