0
点赞
收藏
分享

微信扫一扫

ros使用opencv发布图片消息


 

目录

​​1.工作空间的创建​​

​​2. 编辑主函数代码​​

​​3 编辑 CmakeLists.txt​​

​​4 编译和运行​​

​​5.rviz 中显示​​

​​6. 从命令行传参发布指定图片​​

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

此时可以看到输出全是数字。

 

ros使用opencv发布图片消息_#include

5.rviz 中显示

运行代码:

rosrun rviz rviz

左边点击 add,选中 image ,在 image 的 topic 选项中选 /camera/image,可以看到程序 中需要读取的本地电脑中的指定图片,如图所示:

ros使用opencv发布图片消息_ros_02

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();
}
}

运行代码前话题列表:

ros使用opencv发布图片消息_命令行_03

运行程序指令:

rosrun rosopencv1 rosopencv1 /home/zhong/2.jpg

运行后话题列表:

ros使用opencv发布图片消息_主函数_04

然后我们还像原来一样打开rviz,已经看到新的图片显示出来了。

ros使用opencv发布图片消息_主函数_05


 

 

举报

相关推荐

0 条评论