ROS indigo下OpenCV 3的编译与测试

本文详细介绍了如何在ROS Indigo环境下编译OpenCV 3.2.0,包括设置安装路径、额外模块、编译选项以及配置环境变量。此外,还讲解了如何编译OpenCV的文档和示例,以及使用OpenCV进行图像处理和相机标定的实际操作步骤。
摘要由CSDN通过智能技术生成

ROS indigo 系统下opencv为2.x的版本,但是有些package需要opencv 3,因此有了这篇文章。建议不要装在系统目录下,有需要用到不同于系统的版本时,在CMakeLists.txt中手动指定位置。

Linux下OpenCV的编译

1. 安装位置CMAKE_INSTALL_PREFIX = /home/yake/src/opencv_3.2.0/yake_opencv320_installed

2. 额外的模块OPENCV_EXTRA_MODULES_PATH=/home/yake/src/opencv_contrib-3.2.0/modules

3. BUILD_EXAMPLES=ON

4. BUILD_DOCS=ON

5. INSTALL_C_EXAMPLES=ON

6. INSTALL_PYTHON_EXAMPLES=ON

然后~/.bashrc中加入

能够找到OpenCVConfig.cmake文件的地方( /home/yake/src/opencv_3.2.0/yake_opencv320_installed/share/OpenCV),这个文件也包含CMakeLists.txt中的宏定义(如OpenCV_VERSION,OpenCV_LIBS等)

而PKG_CONFIG_PATH的路径中包含的文件是opencv.pc含有opencv的安装版本,lib路径和include路径信息。

在~/.bashrc中加入以下环境变量

export PKG_CONFIG_PATH=/home/yake/src/opencv_3.2.0/yake_opencv320_installed/lib/pkgconfig:$PKG_CONFIG_PATH

export LD_LIBRARY_PATH=/home/yake/src/opencv_3.2.0/yake_opencv320_installed/lib:$LD_LIBRARY_PATH

检测的时候

查看版本

pkg-config --modversion opencv

查看链接的库文件

pkg-config -cflags --libs opencv

必要时,在CMakeLists.txt中加入(/home/yake/src/opencv_3.2.0/samples/cpp/example_cmake/CMakeLists.txt这里是个官方CMakeLists.txt的写法)

SET(OpenCV_DIR /home/yake/src/opencv_3.2.0/yake_opencv320_installed/share/OpenCV)

find_package(OpenCV 3.2 EXACT REQUIRED)

IF ( OPENCV_FOUND )
message("OpenCV path dir = ${OpenCV_INCLUDE_DIRS}")
message("OpenCV path dir = ${OpenCV_VERSION}")
message("OpenCV path dir = ${OpenCV_LIBS}")
message("OpenCV path dir = ${OpenCV_INSTALL_PATH}")
message("OpenCV path dir = ${OpenCV_DIR}")
ENDIF ( OPENCV_FOUND )

include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(helloCV src/helloCV.cpp)
targer_link_libraries(helloCV ${catkin_LIBRARIES} ${OpenCV_LIBS})

0.编译doc

参考这里好像不太起作用:https://docs.opencv.org/3.4/d7/d9f/tutorial_linux_install.html

后来利用doxygen可以生成

1.编译Samples

~/src/opencv_3.2.0/yake_opencv320_installed/share/OpenCV/samples/cpp目录下

/home/yake/src/opencv_3.4.1/data/haarcascades

/home/yake/src/opencv_contrib-3.3.0/modules/face/data/cascades

 

g++ -g facedetect.cpp -o facedetect `pkg-config --cflags --libs opencv`

./facedetect --cascade="../../haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="../../haarcascades/haarcascade_eye_tree_eyeglasses.xml" --scale=1.3

./facedetect --cascade="../../haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="../../haarcascades/haarcascade_eye.xml" --scale=1.3 /home/yake/src/opencv_3.4.1/samples/data/lena.jpg Detecting face(s) in /home/yake/src/opencv_3.4.1/samples/data/lena.jpg

2. 利用OpenCV抠图

g++ -g grabcut.cpp -o grab_cut `pkg-config --cflags --libs opencv`

./grab_cut /home/yake/src/opencv_3.2.0/samples/data/lena.jpg

先框选,然后Ctrl + Left Mouse GC_BGD Pixels 要去除的背景像素,然后按“n”,最后退出按ESC

3.相机标定

1./calibration  -w=4 -h=5 -s=0.025 -o=camera.yml -op -oe

2. g++ -g imagelist_creator.cpp -o imagelist_creator `pkg-config --cflags --libs opencv`

./imagelist_creator image_list.xml ./cal/*.jpg

   calibration -w=9 -h=6 -s=0.025 -o=camera.yml -op -oe image_list.xml

./facial_features -h

./facial_features lena.jpg ./haarcascades/haarcascade_frontalface_alt.xml

4.生成标定板(棋盘格或圆点标定板)

参考链接:

https://www.samontab.com/web/2012/06/installing-opencv-2-4-1-ubuntu-12-04-lts/

https://www.learnopencv.com/how-to-compile-opencv-sample-code/

 

另外自己还有两篇关于CMakeList的写法的文章

另外要注意的是*.pc 文件,如opencv.pc(临时变量), 以及系统的cv_bridge要特别注意依赖,不要交叉混用。比如同时依赖opencv和cv_bridge, 如果opencv是新版本则cv_bridge最好也是新版本,可以将cv_bridge的源码放在~/catkin_ws/src下,修改它的CMakeLists.txt文件,依赖新版的opencv。

我的CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(cv_bridge)

SET(BOOST_ROOT /home/yake/Downloads/boost_1_54_0_2)
SET(OpenCV_DIR /home/yake/src/opencv-3.3.1/yake_opencv331_installed/share/OpenCV)
SET(OpenCV_ROOT /home/yake/src/opencv-3.3.1/yake_opencv331_installed)
find_package(catkin REQUIRED COMPONENTS rosconsole sensor_msgs)

if(NOT ANDROID)
  find_package(PythonLibs)
  if(PYTHONLIBS_VERSION_STRING VERSION_LESS 3)
    find_package(Boost REQUIRED python)
  else()
    find_package(Boost REQUIRED python3)
  endif()
else()
find_package(Boost REQUIRED)
endif()
find_package(OpenCV 3.3.1 EXACT REQUIRED)

catkin_package(
  INCLUDE_DIRS include
  LIBRARIES ${PROJECT_NAME}
  CATKIN_DEPENDS rosconsole sensor_msgs
#  DEPENDS OpenCV
  CFG_EXTRAS cv_bridge-extras.cmake
)

catkin_python_setup()

#include_directories(include ${Boost_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS})
include_directories(include ${OpenCV_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS})

if(NOT ANDROID)
add_subdirectory(python)
endif()
add_subdirectory(src)
if(CATKIN_ENABLE_TESTING)
  add_subdirectory(test)
endif()

# install the include folder
install(
  DIRECTORY include/${PROJECT_NAME}/
  DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
)

编译完成后,查验

另外,编译的时候也要特别注意~/catkin_ws/build记得删除,来启用重新编译,devel/lib下的lib*.so也要记得检查,还有就是share文件下的各种pc文件,保证环境没有依赖前一次的缓存。

pkgcofig

===========================

Visual Studio 6 : vc6
Visual Studio 2003 : vc7
Visual Studio 2005 : vc8
Visual Studio 2008 : vc9
Visual Studio 2010 : vc10
Visual Studio 2012 : vc11
Visual Studio 2013 : vc12
Visual Studio 2015 : vc14
Visual Studio 2017 : vc15 

================================================

ROS kinetic OpenCV路径

头文件路径

/opt/ros/kinetic/include/opencv-3.3.1-dev
/opt/ros/kinetic/include/opencv-3.3.1-dev/opencv

库文件路径

/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_core3.so.3.3.1     
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_highgui3.so.3.3.1  
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yaked19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值