CMake构建学习笔记13-opencv库的构建

cnblogs 2024-09-02 13:39:00 阅读 93

简要介绍了使用CMake构建OpenCV的关键步骤

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,旨在提供一个跨平台的、易于使用的、快速执行的计算机视觉接口。如果只是简单的使用,其实不必要像笔者这样使用源代码进行构建,直接使用官方提供的二进制安装包即可。一般来说,需要从源代码进行构建的原因有以下几种:

  1. 由于C/C++构建成果的二进制兼容问题,官方提供的安装包或者预编译包比一定能够适配你的编程环境,有的环境也不太可能找到安装包,比如嵌入式、信创。
  2. 构建的成果不一定是你需要的构建类型,例如构建RelWithDebInfo类型。个人认为传统的Debug和Release模式似乎不能满足于目前软件测试能力退化环境了,反而RelWithDebInfo类型更实用一点。例如OpenCV的Release其实就是RelWithDebInfo,因为它同时生成了符号库文件。
  3. 官方提供的安装包或者预编译包不一定有符号库,符号库对于Debug调试非常重要,它可以让我们看到代码文件,让我们知道出问题的具体地方在哪里。虽然说依赖库的bug我们一般改不了,但是可以给我们一点提示让我们正确地调用依赖库,避免崩溃。

笔者构建的是OpenCV的3.4.16版本,这也是OpenCV3.X的最新版本,关键构建指令如下所示:

<code># 配置阶段,指定生成器、平台和安装路径

cmake .. -G "$Generator" -A x64 `

-DCMAKE_BUILD_TYPE=Release `

-DCMAKE_PREFIX_PATH="$env:GISBasic" `code>

-DCMAKE_INSTALL_PREFIX="$InstallDir" `code>

-DBUILD_opencv_world=ON `

-DWITH_GDAL=OFF `

-DWITH_FFMPEG=OFF `

-DWITH_IPP=OFF `

-DBUILD_TESTS=OFF `

-DBUILD_PERF_TESTS=OFF `

-DBUILD_opencv_python_tests=OFF `

-DBUILD_opencv_python_bindings_generator=OFF `

-DBUILD_JAVA=OFF `

-DBUILD_opencv_java=OFF `

-DBUILD_opencv_java_bindings_generator=OFF `

#-DBUILD_ZLIB=OFF `

#-DBUILD_JPEG=OFF `

#-DBUILD_PNG=OFF `

#-DBUILD_TIFF=OFF `

#-DWITH_PROTOBUF=ON `

#-DBUILD_PROTOBUF=ON `

#-DPROTOBUF_UPDATE_FILES=OFF `

# 构建阶段,指定构建类型

cmake --build . --config Release

# 安装阶段,指定构建类型和安装目标

cmake --build . --config Release --target install

OpenCV具有大量的构建选项,读者可以按需进行构建:

  1. -DBUILD_opencv_world=ON表示将OpenCV的所有模块合并成一个名为opencv_world3416的库。
  2. -DWITH_GDAL=OFF-DWITH_FFMPEG=OFF-DWITH_IPP=OFF像GDAL、FFMPEG这样的都是非常大型的库,如果暂时用不到功能的话就先不用参与构建了。
  3. 其他以“BUILD”开头的选项都是测试、案例、或者其他语言的绑定什么的,如果不需要也不要进行构建了。
  4. OpenCV其实也用到了像zlib、libpng、libjpeg、libtiff等等前面已经构建好的库,如果像BUILD_ZLIB=OFF这样设置,构建OpenCV的时候就会使用已经构建好的库,而不是从OpenCV内部提供的代码重新构建。不过问题在于OpenCV还依赖于protobuf,谷歌的库是另外一套风格,构建出来问题多多,读者就不用尝试了,还是都从OpenCV内部提供的代码重新构建的好。

上一篇: 【C++】入门之域的详解

下一篇: 理想雪

本文标签

C/C++    C++    CMake    OpenCV    C++ / CMake    构建   


声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。