在20.04 ros noetic opencv4的环境下部署opencv3的功能包注意事项

128 篇文章 13 订阅

在20.04 ros noetic opencv4的环境下部署opencv3的功能包注意事项

这里以opencv3.3.1为例

环境需要单独安装opencv3.3.1和opencv_contrib3.3.1
3.4.1测试过也OK
新建一个文件夹opencv331来专门存放opencv3.3.1和opencv_contrib3.3.1

mkdir opencv331
cd opencv331

然后运行下面命令下载opencv3.3.1和opencv_contrib3.3.1

git clone -b 3.3.1 https://github.com/opencv/opencv.git
git clone -b 3.3.1 https://github.com/opencv/opencv_contrib

接着编译安装
下面camke命令中,CMAKE_INSTALL_PREFIX指定了安装路径,OPENCV_EXTRA_MODULES_PATH指定了opencv_contrib的路径,注意确保opencv_contrib和opencv处于同一个文件夹内,下面OPENCV_EXTRA_MODULES_PATH指定的相对路径才有效。

cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D WITH_CUDA=OFF -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
make -j8
sudo make install

此时ubuntu环境里面可以找到opencv4也可以找到opencv3

单纯地把功能包地cmakelists里面地find_package(OpenCV REQUIRED)改为find_package(OpenCV 3.4.1 REQUIRED)是不够的
改不改,编译功能包都会出现比如undefined reference to cv::mat::mat()的报错,出现这种undefined的报错一般是找到了头文件,但是链接库的时候没有链接库或者没有找到库,这里猜测是cv_bridge的原因,虽然找到了opencv3.3.1,但是链接库实际还是链接的opencv4的库,但是可能又不符合,所以实际没有找到opencv3的库,导致编译出现undefined。

输入图片说明

可以cmakelists里面加上这些打印,会发现虽然找到的是opencv3,但是链接的库还是opencv4的

message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
message(STATUS "    catkin libraries: ${catkin_LIBRARIES}")

输入图片说明

解决方法是自己再另外编码编译安装一个cv_bridge,之前系统二进制安装的cv_bridge不用卸载(之前为了保险连系统原本自动二进制安装的cv_bridge也卸载了,其实不用)
按照下面操作源码编译部署一个cv_bridge,使得这个cv_bridge是调用的opencv3,同时自己这个功能包是找到的这个源码编译的cv_bridge,而不是系统二进制安装的cv_bridge就饿可以了,实现这个的关键操作就是自己功能包的cmakelists里面加上set(cv_bridge_DIR "your-path/cv_bridge_ws/devel/share/cv_bridge/cmake")
cv_bridge: cv-bridge for melodic
 

输入图片说明

还有一个方法也可以改变ROS功能包自动链接的opencv,也就是cv_bridge自动链接的功能包
编译promethues detection模块的时候,可能会出现和opencv相关的问题。因为官方的系统很可能默认装的opencv4,至少我用了nano是这样,普罗米修斯群里也不少人的系统是这样的。
可以按照下面这个解决,我在nano上编译普罗米修斯的detection模块的时候就出现了问题,按照下面这个解决了,编译通过了。里面很关键的一部是要把之前的build和devel文件夹删掉。
https://github.com/amov-lab/Prometheus/wiki/Q&A%E6%B1%87%E6%80%BB
 

输入图片说明

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值