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

2024-09-02 13:52

本文主要是介绍CMake构建学习笔记13-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的最新版本,关键构建指令如下所示:

# 配置阶段,指定生成器、平台和安装路径
cmake .. -G "$Generator" -A x64 `-DCMAKE_BUILD_TYPE=Release `-DCMAKE_PREFIX_PATH="$env:GISBasic" `-DCMAKE_INSTALL_PREFIX="$InstallDir" `-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内部提供的代码重新构建的好。

这篇关于CMake构建学习笔记13-opencv库的构建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130137

相关文章

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核