1. 程式人生 > >[實例]ROS使用OpenCV讀取圖像並發布圖像消息在rviz中顯示

[實例]ROS使用OpenCV讀取圖像並發布圖像消息在rviz中顯示

top 選項 == works rate pic echo 內容 color

思路:
(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/rosopencv
catkin_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

[實例]ROS使用OpenCV讀取圖像並發布圖像消息在rviz中顯示