正文
[实例]ROS使用OpenCV读取图像并发布图像消息在rviz中显示
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
思路:
(1)使用opencv读取本地图像
(2)调用cv_bridge::CvImage().toImageMsg()将本地图像发送给rviz显示
一、使用opencv读取本地图像并发布图像消息(1)利用catkin新建一个工程叫rosopencv,并进行初始化
mkdir -p rosopencv/src cd rosopencv/src catkin_create_pkg rosopencv sensor_msgs cv_bridge roscpp std_msgs image_transport cd .. catkin_make source ./devel/setup.bash
(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/topeet/test.jpg", 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(); }}
注意:cv::Mat image = cv::imread("/home/topeet/test.jpg", CV_LOAD_IMAGE_COLOR);
这句中的"/home/topeet/test.jpg"
需要改成自己图片的路径.
(3)编辑CmakeLists.txt在工程目录下的/src/rosopencv/src/CmakeLists.txt中加入如下内容
add_executable(rosopencv src/rosopencv.cpp)
target_link_libraries(rosopencv ${catkin_LIBRARIES})
add_dependencies(rosopencv robot_vision_generate_messages_cpp)
二、编译和运行编译
cd ~/dev/workspace/rosopencvcatkin_make
运行
rosrun rosopencv rosopencv
输入
rostopic echo /camera/image
全是数字。
三、在rviz 中显示运行rviz
rosrun rviz rviz
左边点击add
选中image
在image的topic选项中选
/camera/image
转载自:http://blog.csdn.net/ktigerhero3/article/details/70157582