Ubuntu 18.04 使用Cmakelist 对 Opencv不同的版本切换和管理

我们在运行程序的时候,经常在跑不同的代码,需要不同的Opencv 版本,那么我们应该在运行代码的时候,指定你使用哪个opencv来进行编译和运行的,我这里以opencv 3. 2 和oepncv 3.3 为例来进行说明:
首先 你需要对2个版本的opencv 进行安装,在网上下载源码之后,便可以进行编译了:
*

首先建立2个文件夹分别放置你安装opencv的路径

cd ~
mkdir otherpackage
cd ~/otherpackage
mkdir opencv3.2 
mkdir opencv 3.3 

现在对于你下载的源码进行安装。opencv 的安装进行有依赖环境,这个网上很多,读者可以自行查看。
现在开始安装opencv3.2

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_PERF_TESTS=OFF -D WITH_CUDA=OFF -D WITH_IPP=OFF -D ENABLE_PRECOMPILED_HEADERS=OFF -D CMAKE_INSTALL_PREFIX=/home/miao/otherpackage/opencv3.2 .. 
make -j4
sudo make install

cmake … 和make 命令执行时间都比较长,cmake 执行的时候可能会下载一个包导致时间的浪费,等一回就好了。或者手动下载ippicv并且把他放到opencv-3.2.0/3rdparty/ippicv/downloads/目录下。我将openccv 3.2 安装在了/home/miao/otherpackage/opencv3.2 路径下面。
继续安装opencv3.3 步骤和上面的一样:

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_PERF_TESTS=OFF CMAKE_INSTALL_PREFIX=/home/miao/otherpackage/opencv3.3 .. 
make -j4
sudo make install

我将openccv 3.3安装在了/home/miao/otherpackage/opencv3.3 路径下面。
现在为止,你的电脑上面应该安装有2个opencv 的文件夹了。
当然我的电脑有3个安装包,你可以忽略这一点
我的电脑上面有有3个安装包,你可以忽略这一点。
这时候,你点进去会发现你安装的文件夹都上了锁,你需要修改对他们的权限

 sudo chmod -R 777 opencv3.2
 sudo chmod -R 777 opencv3.3 

然后进入

cd /home/miao/otherpackage/opencv3.2/share/OpenCV

然后你发现了一个文件OpenCVConfig.cmake 这就是存放我们opencv 头文件和库文件路径的文件。一会指定不同的版本,就是指定我们不同opencv对应的这个文件的路径而已。

opencv 已经安装成功,之前下载的软件包也可以删除了。

编写Cmakelist 文件

在你的project 命令前面加上set 的指令
如果你想使用opencv 3.3 :

set(OpenCV_DIR "/home/miao/otherpackage/opencv3.3/share/OpenCV" )  # 你的opencv 3.3安装的OpenCVConfig.cmake路径
project(Test)

如果你想使用opencv 3.2 :

set(OpenCV_DIR "/home/miao/otherpackage/opencv3.2/share/OpenCV" )  # 你的opencv3.2 安装的OpenCVConfig.cmake路径
project(Test)

如果你想验证你用的是哪个opencv库:

message(STATUS ${OpenCV_INCLUDE_DIRS})   # 将对于调用的opencv的头文件的地址打印出来

C++ OpenCV 的安装笔记(20240506 OpenCV 4.x 版本的)

安装的官网链接: https://docs.opencv.org/4.x/d7/d9f/tutorial_linux_install.html

现在的Opencv 好像已经很简单可以安装了,不需要你提前装很多依赖包。

  • 下载 Source 源文件包:
https://github.com/opencv/opencv/archive/4.x.zip
unzip opencv.zip
# Create build directory
mkdir -p build && cd build
make -j8
sudo make install
## 快速查看当前 ubuntu 的 opencv 的版本
opencv_version

编译的过程当中,需要手动下载在 ippicv 的安装包 和 ade 的安装包.
Ippcv 可以 在cmake 的时候设置 -DWITH_IPP=OFF 不用去下载 Ippcv 的文件包。
ADE 包还是需要手动下载,并且需要修改对应的 DownloadADE.cmake 文件:

在Cmake 文件里 OpenCV 框架中提供的 ocv_download 函数,但是我们的机器无法翻墙的,所以需要手动下载。

修改 DownloadADE.cmke 下面的代码,按照下面的方式:

# 检查文件是否已在预期目录中, 我下载好的文件的路径
set(ade_zip_file "/home/smiao/GaussianPro/opencv-4.x/.cache/ade/ade-0.1.2d.zip")
if(EXISTS "${ade_zip_file}")
    message(STATUS "ADE zip file found in cache: ${ade_zip_file}")
    # 直接设置文件路径而无需下载
    set(ade_filename ${ade_zip_file})
    # 检查是否已解压
    set(ade_unpacked_dir "/home/smiao/GaussianPro/opencv-4.x/.cache/ade/unpacked")
    if(NOT EXISTS "${ade_unpacked_dir}")
        message(STATUS "Unpacking ADE zip file...")
        # 解压文件到指定目录
        execute_process(
            COMMAND ${CMAKE_COMMAND} -E tar xzf ${ade_zip_file}
            WORKING_DIRECTORY ${ade_src_dir}
        )
    else()
        message(STATUS "ADE is already unpacked in ${ade_unpacked_dir}")
    endif()
else()
    # 如果文件不在缓存中,则使用原来的下载逻辑
    ocv_download(
        FILENAME ${ade_filename}
        HASH ${ade_md5}
        URL
            "${OPENCV_ADE_URL}"
            "$ENV{OPENCV_ADE_URL}"
            "https://github.com/opencv/ade/archive/"
        DESTINATION_DIR ${ade_src_dir}
        ID ADE
        STATUS res
        UNPACK RELATIVE_URL
    )
endif()
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐