Ubuntu ROS Opencv 验证
为验证我的系统是否能支持ROS用Opencv,做以下内容:
- 创建工作空间
mkdir ros_opencv/src -p
- 初始化工作空间
cd ros_opencv/src
catkin_init_workspace
- 创建opencv_test功能包
catkin_create_pkg opencv_test sensor_msgs cv_bridge roscpp std_msgs image_transport
- 编写程序opencv_test_node.cpp
vim src/opencv_test_node.cpp
#include <ros/ros.h>
#include <stdio.h>
#include <image_transport/image_transport.h>
#include <cv_bridge/cv_bridge.h>
#include <sensor_msgs/image_encodings.h>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
static const char WINDOW[] = "Image window";
static void help()
{
printf("\nThis program demonstrates converting OpenCV Image to ROS Image messages \n"
);
}
int main(int argc, char** argv)
{
help();
ros::init(argc, argv, "image_converter");
//Reading an image from the file
// ubuntu 是我自己的用户名,需要根据自己的实际用户名修改,不然找不到文件
cv::Mat cv_image =
cv::imread("/home/ubuntu/ros_opencv/src/opencv_test/imag/1.jpg");
if(cv_image.empty() )
{
ROS_ERROR("Read the picture failed!");
return -1;
}
//Convert OpenCV image to ROS message
ros::NodeHandle node;
image_transport::ImageTransport transport(node);
image_transport::Publisher image_pub;
image_pub=transport.advertise("OutImage", 1);
ros::Time time=ros::Time::now();
cv_bridge::CvImage cvi;
cvi.header.stamp = time;
cvi.header.frame_id = "image";
cvi.encoding = "bgr8";
cvi.image = cv_image;
sensor_msgs::Image im;
cvi.toImageMsg(im);
image_pub.publish(im);
ROS_INFO("Converted Successfully!");
//Show the image
cv::namedWindow(WINDOW);
cv::imshow(WINDOW,cv_image);
cv::waitKey(0);
ros::spin();
return 0;
}
- 修改CMakeLists.txt文件
vim CMakeListx.txt
在find_package( )前添加:
set(OpenCV_DIR /usr/share/OpenCV/)
tips: 这里是设置opencv路径,需要根据自己系统路径修改
在文件最后添加:
include_directories(include ${OpenCV_INCLUDE_DIRS})
include_directories(include ${catkin_INCLUDE_DIRS})
add_executable(opencv_test_node src/opencv_test_node.cpp)
target_link_libraries(opencv_test_node ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
add_dependencies(opencv_test_node opencv_test_gen.cpp)
- 添加图片
mkdir image
将这张图片保存到image文件夹中,并修改文件名为:1.jpg
- 编译 加载工作空间
cd ~/ros_opencv
catkin_make
sudo echo "~/ros_opencv/devel/setup.bash" >> ~/.bashrc
如图:
- 运行
打开一个终端
roscore
打开另一个终端
rosrun opencv_test opencv_test_node