发布的topic是/image_raw , 格式为ROS图片格式。输入的视频源只要opencv能读取就可以。视频发布完后会退出程序。
#include <ros/ros.h>
#include<image_transport/image_transport.h>
#include<cv_bridge/cv_bridge.h>
#include<sensor_msgs/image_encodings.h>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
#include<stdio.h>
#include<math.h>
#include<vector>
using namespace std;
cv_bridge::CvImagePtr cv_ptr;
using namespace cv;
int main(int argc , char ** argv)
{
ros::init(argc , argv , "publisher");
//cv::namedWindow("Example2", WINDOW_AUTOSIZE);
VideoCapture cap;
cap.open("/home/shanyx/Desktop/video.mp4");
Mat frame;
ROS_INFO("SUCCESS,waiting for image");
ros::NodeHandle n; //初始化节点,调用ros api接口句柄。
//定义一个发布者
ros::Publisher chatter_pub = n.advertise<cv_bridge::CvImage>("/image_raw", 1000);
ros::Rate loop_rate(100); //设置发布频率
while (ros::ok())
{
cap >> frame;
if (frame.empty()) return 0;
//cv::imshow("source",frame);
sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", frame).toImageMsg();
chatter_pub.publish(msg);
loop_rate.sleep();
//cv::waitKey(10);
}
ros::spin();
return 0;
}