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

相关文章

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y