首页 > 其他分享 >CMake构建学习笔记13-opencv库的构建

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

时间:2024-09-02 12:47:12浏览次数:12  
标签:13 OFF #- opencv OpenCV DBUILD 构建 CMake

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内部提供的代码重新构建的好。

标签:13,OFF,#-,opencv,OpenCV,DBUILD,构建,CMake
From: https://www.cnblogs.com/charlee44/p/18392502

相关文章

  • 需要帮助正在构建返回最早日期值的方法
    如果你正在使用Python编程语言,你可以使用内置的min()函数来返回一个列表中的最早日期值。以下是一个示例代码:fromdatetimeimportdatetime#定义一个日期列表dates=[datetime(2023,1,1),datetime(2023,2,1),datetime(2023,3,1)]#使用min()函数返回最早日期......
  • 基于Prometheus和Grafana的现代服务器监控体系构建
    构建基于Prometheus和Grafana的现代服务器监控体系涉及多个步骤,以下是一个基本的指南来帮助你开始这个过程。1.确定监控需求确定你想监控的服务器、服务和指标。确定监控的目的,比如性能分析、故障排查、容量规划等。2.安装PrometheusPrometheus是一个开源监控系统,......
  • SDKD 2024 Summer Training Contest F2(The 13th Shandong ICPC Provincial Collegiat
    A-Orders题意每天能生产k个产品的工厂有n个订单,第i个订单是在a_i天交b_i个产品,问能否交付。思路订单按日期排序,记录剩下的商品.代码#define_CRT_SECURE_NO_WARNINGS#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintmxn=1e6+5......
  • 数据摆渡工具:构建安全的跨网数据传输通道
    数据摆渡工具可以解决哪些问题?数据摆渡工具的主要作用是实现不同网络环境下,人与人、人与系统或者系统与系统之间的数据安全、高效传输及管理问题。这类工具主要可以解决以下问题:1、数据传输与同步跨网络数据传输:内外网数据摆渡产品可以安全地将数据从内部系统迁移到外部云服务......
  • 2024 年 13 个适用于 Linux 的最佳照片图像编辑器
      2024年13个适用于Linux的最佳照片图像编辑器   在本文中,我回顾了各种Linux发行版上可用的一些最佳照片编辑软件。这些不是唯一可用的照片编辑器,但却是Linux用户最流行和最常用的照片编辑器之一。1.GIMP首先,在列表中,我们有 GIMP,一个免费、开源、跨平台......
  • 1312. 让字符串成为回文串的最少插入次数
    1312.让字符串成为回文串的最少插入次数给你一个字符串s,每一次操作你都可以在字符串的任意位置插入任意字符。请你返回让s成为回文串的最少操作次数。「回文串」是正读和反读都相同的字符串。示例1:输入:s="zzazz"输出:0解释:字符串"zzazz"已经是回文串了,所......
  • Linux项目自动化构建清理工具-make/Makefile如何实现编译代码
     目录1、make和makefile有什么用?2、如何使用这两个工具:2.1创建mekefile文件2.2输入make指令2.3输入makeclean指令3、makefile文件如何编译程序什么是依赖关系和依赖方法:TIP:4、make和makefile怎么知道可执行程序是比较新的呢?认识一下时间:(ACM)5、.PHONY修饰目标文件......
  • 洛谷 P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
    题目大意小A和小B,要进行\(N\)次猜拳,每次按照一定周期出拳,胜负情况如下:求出小A和小B分别赢了几次。思路枚举\(N\)次猜拳,每次比较\(a[powera]\)与\(b[powerb]\)(poewra与powerb是a和b数组的索引,详见代码)。CODE#include<bits/stdc++.h>usingnamespacestd;in......
  • 代码随想录刷题day13丨二叉树理论基础,递归遍历,迭代遍历,统一迭代,层序遍历
    代码随想录刷题day13丨二叉树理论基础,递归遍历,迭代遍历,统一迭代,层序遍历1.二叉树理论基础1.1二叉树种类满二叉树概述:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节......
  • Arena:Arena模型构建与仿真基础
    Arena:Arena模型构建与仿真基础Arena软件简介Arena软件的历史与发展Arena软件自1983年由SystemModeling公司开发以来,已经成为业界领先的离散事件仿真软件。随着科技的进步和市场需求的变化,Arena软件不断更新迭代,引入了更多先进的功能和用户友好的界面。1999年,SystemMod......