1. 程式人生 > >ros程式碼中新增使用opencv庫,cv::Mat和ros image之間的相互轉換

ros程式碼中新增使用opencv庫,cv::Mat和ros image之間的相互轉換

ros中很多時候要用到圖形處理,這時就需要使用opencv庫,本篇主要將怎麼在ros現成node上使用opencv的庫函式

1.修改編譯指令碼

第一步:在node所在的CMakefile檔案中opencv庫查詢,例如:

find_package( OpenCV REQUIRED COMPONENTS 
  core 
  highgui 
  imgproc
)

或者直接
find_package( OpenCV REQUIRED )

為的是在編譯前到環境變數配置的路徑中找到opencv package,如果找不到,那需要檢視下LD_LIBRARY_PATH環境變數,或者有沒有安裝opencv

第二步:在target_link_libraries中增加以來庫,例如:

target_link_libraries(xxxxxx ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})

增加目標連結時的依賴庫

第三步:在所需使用的cpp檔案中增加標頭檔案,例如:

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

2.cvMat和ros image data之間的轉換

ros中已提供現成的組建cv_bridge,方便大家來使用


第一步:需要在CMakefile中,增加如下:

find_package(catkin REQUIRED nodelet roscpp sensor_msgs cv_bridge)

如果cakin_package裡面有內容,例如
catkin_package(
  INCLUDE_DIRS include
  LIBRARIES xxxxx  xxxx   xxxxx
  CATKIN_DEPENDS dynamic_reconfigure image_geometry image_transport nodelet roscpp sensor_msgs
)

也需要在最後CATKIN_DEPENDS中新增cv_bridge,改成如下

catkin_package(
  INCLUDE_DIRS include
  LIBRARIES xxxxx  xxxx   xxxxx
  CATKIN_DEPENDS dynamic_reconfigure image_geometry image_transport nodelet roscpp sensor_msgs cv_bridge
)

第二步:需要在package.xml中新增如下
<build_depend>cv_bridge</build_depend>
<run_depend>cv_bridge</run_depend>

第三步:需要在cpp檔案中增加標頭檔案,如下
#include <cv_bridge/cv_bridge.h>

就可以使用cv_bridge,使用方法可見連結http://wiki.ros.org/cv_bridge/Tutorials。

http://wiki.ros.org/cv_bridge/Tutorials/UsingCvBridgeToConvertBetweenROSImagesAndOpenCVImages