您现在的位置:首页 > >

ROS中使用opencv

发布时间:



ROS中使用opencv
在ROS中使用opencv的小例程安装opencv建立OpenCV测试程序准备工作程序




在ROS中使用opencv的小例程

记录在ROS中学*使用opencv的过程


安装opencv

我们首先需要在ubuntu下安装ubuntu版本的opencv,


    下载opencv的Linux版本,最好将contrib库也下载下来(同样是Linux版本),注意两者的兼容性,并安装好一些依赖库参照网上教程安装GUI版本的cmake,以及后续的opencv编译。在第一次点完configure之后在上面的配置窗口找到OPENCV_EXTRA_MODULE_PATH,将opencv_contrib库中mudules的路径加入进去,然后再configure,无问题后generate。
    然后按照博客教程编译,make install后在/usr/local/lib中可以看到装好的opencv库文件(注意改路径),以及contrib库中的各种库文件,具体的安装代码如下:

sudo apt-get install cmake

sudo apt-get install cmake-qt-gui
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
sudo cmake-gui

cd opencv_source/mybuild/

sudo make -j4
sudo make install
配置库路径
sudo gedit /etc/ld.so.conf.d/opencv.conf
添加opencv库的安装路径:
/usr/local/lib

sudo ldconfig

sudo gedit /etc/bash.bashrc

添加PKG_CONFIG_PATH变量:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

建立OpenCV测试程序
准备工作

很喜欢这段话,作者将ROS中的各个概念解释地很清楚,工作空间(work space)是ROS中非常重要的一个概念,可以把工作空间理解为一个大的工厂,里面的分成几个大的生产车间(package),每一个生产车间中会有若干个具有不同技能的工人(node)。当工厂运转时,每个车间中的工人node同时工作,他们通过话题(topic)进行信息沟通。各个大的车间之间也存在这互相依赖的关系,共同组成一个有机的整体。
我们新建一个工作空间(和我们之间建立的工作空间catkin_ws一样)


mkdir -p ros_opencv/src

然后初始化工作空间(和我们之前做的一样,再来一遍)


cd ros_opencv/src
catkin_init_workspace

在src文件夹下创建package,功能包的名字叫做opencv_test


catkin_create_pkg opencv_test sensor_msgs cv_bridge roscpp std_msgs image_transport

注意这一步很多网上的教程加上了opencv库,可能是ROS里面装的OpenCV,我推测如果是用自己安装的opencv库的话。后面是不用加的。我没加反而后面编译成功了。
修改opencv_test目录下的CMakeLists.txt
主要在find_package加上


find_package(OpenCV REQUIRED)

以及最后面加上


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_gencpp)

然后你需要下载一张图片放在一个已知的位置,为读取图片做准备


程序

说了这么多,可以上主程序了


#include
#include
#include
#include
#include
#include
#include

static const char WINDOW[] = "Image window";
static void help()
{
printf("
This program demonstrates converting OpenCV Image to ROS Image messages
"
);

}

int main(int argc, char** argv)
{
help();
ros::init(argc, argv, "image_converter");

//Reading an image from the file
cv::Mat cv_image = cv::imread("/home/vlt/Pictures/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;
}

后面还需要编译


cd ros_opencv
catkin_make

编译成功大概是这样的

之后就可以运行了


roscore
source devel/setup.bash
rosrun opencv_test opencv_test_node

运行成功就可以出现漂亮的小仙女啦!

OK!祝大家也运行成功!


参考链接
1:需要用到OpenCV依赖库的CMakeLists注意事项
2:ROS初级教程cmake cmakelist.txt的编写教程,让你看懂一大堆cmakelist里面写的是什么
3:程序参考


友情链接: 医学资料大全 农林牧渔 幼儿教育心得 小学教育 中学 高中 职业教育 成人教育 大学资料 求职职场 职场文档 总结汇报