如果你想在C++中使用ROS发布大量的图像,可以通过在循环中不断地读取和发布图像。以下是一个示例代码:
#include <ros/ros.h>
#include <sensor_msgs/Image.h>
#include <opencv2/opencv.hpp>
int main(int argc, char** argv)
{
// 初始化ROS节点
ros::init(argc, argv, "image_publisher");
ros::NodeHandle nh;
// 创建一个图像发布者
ros::Publisher image_pub = nh.advertise<sensor_msgs::Image>("/image_topic", 10);
ros::Rate rate(10); // 设置发布频率为10Hz
int image_count = 0;
while (ros::ok())
{
cv::Mat image;
// 从文件或摄像头等来源加载图像数据到image变量中
sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg();
image_pub.publish(msg); // 发布图像消息
ros::spinOnce(); // 处理回调函数
rate.sleep(); // 控制发布频率
image_count++;
if (image_count >= 100) {
break; // 停止发布图像数量达到一定值后退出循环
}
}
return 0;
}
在这个示例代码中,我们通过循环来不断加载并发布图像消息。你可以根据自己的需求修改图片加载的方式,比如从文件夹遍历、实时摄像头捕捉等。同时,我设置了一个image_count变量来控制发布的图像数量,当达到一定值后,退出循环。你可以根据实际需求进行调整。记得在每次循环中调用ros::spinOnce()处理ROS节点的回调函数,并使用rate.sleep()来控制发布频率。
内容由零声教学AI助手提供,问题来源于学员提问




