公司动态
Ubuntu下部署opencv到工程里
一、背景在项目中希望工程能快速地移植到他人的电脑里而不用手动安装配置opencv环境。所以我们需要把opencv放入工程里。在这里我第一时间想的就是使用opencv编译静态库:cmake -D CMAKE_BUILD_TYPERELEASE .. \ -D CMAKE_INSTALL_PREFIXinstall \ -D OPENCV_EXTRA_MODULES_PATH../opencv_contrib-4.5.0/modules \ -D OPENCV_GENERATE_PKGCONFIGON \ -D BUILD_SHARED_LIBSNO \ ..编译完后我发现静态库太多一个一个链接入工程太麻烦于是我在编译的时候又加入了 -D BUILD_opencv_worldON 这样所有库都会被整合起来。但问题也随之而来在调用这个库时工程报错了原因是找不到对应的库文件。查了一番后发现虽然库文件都被整合起来了但这个整合起来的静态库文件里没有调用那些库文件的参数。在思考一番后我想既然静态库不行我用动态库可不可以。一般工程里使用opencv是在CMakeLists.txt文件里利用 find_package(OpenCV REQUIRED) 去找到opencv安装目录里的四个.cmake文件再通过这些文件找到对应配置的opencv文件。这样只要在CMakeLists.txt里设置.cmake文件的查找路径再写个自动给配置文件添加lib库文件路径的.sh文件。具体步骤如下二、opencv部署opencv版本4.5.01.安装环境依赖sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev第三行可选择是否安装依赖2.下载源码opencv https://opencv.org/releases/opencv_contrib https://github.com/opencv/opencv_contrib/tree/4.5.0将opencv_contrib放到opencv文件夹3.编译新建build.sh文件写入#!/bin/bash if [[ ! -d build ]]; then mkdir build fi cd build rm -rf * cmake -D CMAKE_BUILD_TYPERELEASE .. \ -D CMAKE_INSTALL_PREFIXinstall \ -D OPENCV_EXTRA_MODULES_PATH../opencv_contrib-4.5.0/modules \ -D OPENCV_ENABLE_NONFREEON \ -D BUILD_opencv_python2OFF \ -D BUILD_opencv_python3OFF \ -D OPENCV_GENERATE_PKGCONFIGON \ -D BUILD_opencv_javaOFF \ -D BUILD_opencv_worldON \ -D BUILD_OPENEXRON \ -D BUILD_JAVAOFF \ -D BUILD_ANDROID_EXAMPLESOFF \ -D WITH_OPENCLOFF \ -D WITH_IPPOFF \ -D WITH_TBBOFF \ -D BUILD_EXAMPLESOFF \ -D BUILD_TESTSOFF \ -D BUILD_PERF_TESTSOFF \ -D BUILD_DOCSOFF \ .. make -j4 make install可以根据需要增删各个启用参数4.部署编译成功后获得一个install文件夹把文件夹里的lib文件夹和Include文件夹复制到工程文件里。在CMakeLists.txt文件里添加# find opencv set(OpenCV_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/cmake/opencv4) find_package(OpenCV 4.5.0 REQUIRED) include_directories(./include/opencv4) target_link_libraries(这里写你设置的工程名 PUBLIC ${OpenCV_LIBS} )新建一个EnvironmentalConfiguration.sh#!/bin/bash sudo -s EOF cd ./lib DIR$(cd $(dirname $0) pwd ) cd /etc/ld.so.conf.d/ if [ -d ./opencv.conf ]; then touch opencv.conf fi echo $DIR opencv.conf ldconfig EOF这个将opencv库文件路径加入配置,以防万一配置没启用EnvironmentalConfiguration.sh文件运行后重启一次电脑。这样只要将工程文件夹整个打包发给别人解压后运行EnvironmentalConfiguration.sh就可以使用opencv了。