目录
1.工作空间的创建
新建一个功能包叫 rosopencv,并进行初始化;
catkin_create_pkg rosopencv cv_bridge image_transport roscpp sensor_msgs std_msgs
2. 编辑主函数代码
主函数 rosopencv.cpp 内容如下:
#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>
#include <stdio.h>
int main(int argc, char** argv)
{
ros::init(argc, argv, "image_publisher");
ros::NodeHandle nh;
image_transport::ImageTransport it(nh);
image_transport::Publisher pub=it.advertise("camera/image",1);
cv::Mat image = cv::imread("/home/zhitong/hi.jpeg", CV_LOAD_IMAGE_COLOR);
if(image.empty()){
printf("open error\n"); }
sensor_msgs::ImagePtr msg=cv_bridge::CvImage(std_msgs::Header(),"bgr8",image).toImageMsg();
ros::Rate loop_rate(5);
while(nh.ok()){
pub.publish(msg);
ros::spinOnce;
loop_rate.sleep();
}
}
3 编辑 CmakeLists.txt
set(OpenCV_DIR /usr/local/share/OpenCV)
message(STATUS "version: ${OpenCV_VERSION}")
find_package(OpenCV REQUIRED)
add_executable(rosopencv src/rosopencv.cpp)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(rosopencv ${OpenCV_LIBS})
target_link_libraries(rosopencv ${catkin_LIBRARIES})
4 编译和运行
cd ~/dev/workspace/rosopencv
catkin_make
可运行代码:
rosrun rosopencv rosopencv
输入代码:
rostopic echo /camera/image
此时可以看到输出全是数字。
5.rviz 中显示
运行代码:
rosrun rviz rviz
左边点击 add,选中 image ,在 image 的 topic 选项中选 /camera/image,可以看到程序 中需要读取的本地电脑中的指定图片,如图所示:
6. 从命令行传参发布指定图片
代码:
#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>
int main(int argc, char** argv){
ros::init(argc, argv, "image_publisher");
ros::NodeHandle nh;
image_transport::ImageTransport it(nh);
image_transport::Publisher pub = it.advertise("camera/image", 1);
cv::Mat image = cv::imread(argv[1], CV_LOAD_IMAGE_COLOR);
cv::waitKey(30);
sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg();
ros::Rate loop_rate(5);
while (nh.ok()) {
pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
}
}
运行代码前话题列表:
运行程序指令:
rosrun rosopencv1 rosopencv1 /home/zhong/2.jpg
运行后话题列表:
然后我们还像原来一样打开rviz,已经看到新的图片显示出来了。
参考:
https://blog.csdn.net/weixin_39652282/article/details/116917514