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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss