Opencv DNN C++ CPU 平台编译配置过程

news2025/1/17 22:05:07

在这里插入图片描述

Opencv DNN C++ CPU 平台编译配置过程

以下内容基于 windows 平台,实际上不同平台在基础工具齐全的情况下,编译过程差异并不大。

opencv 随着版本的更新,对于不同算子的支持也会逐步完善,所以尽量使用新的版本。

同时也可以把对应版本的 opencv_contrib 准备好。可以结合需求查看 这一扩展模块 真的是否有需要,我们这里默认不安装。

  • https://github.com/opencv/opencv/releases
  • https://github.com/opencv/opencv_contrib/tags

这里为了在 qt 中使用 gcc 编译的版本,在官方仓库中提供的 windows 版本文件中直接提供了 vs 编译的库文件,但是由于其也提供了源码,所以我们可以重新使用 mingw 编译一份。不同的编译器编译的库一般不能混用。所以这也需要你的电脑上事先准备好 mingw 套件,并配置好环境变量。一般情况下,装好的 qt 软件目录中是有现成的 mingw 套件的。

以 opencv-4.7.0-windows.exe 为例。这类 exe 文件执行后指定目录可以直接解压出其中包含的 opencv 的文件,包含 buildsources 文件夹。前者是预编译好的文件,后者是源码,我们基于后者重新编译。这一过程需要使用 cmake,可以从官网 下载最新的稳定版本的二进制安装文件。这里直接使用 windows 64位版本。安装好 cmake 后,打开其 gui 版本。

一些重要的配置

由于网络问题,cmake 使用过程中汇报一些错误,所以在使用 cmake 之前,我们先在一些扩展包的 https://raw.github*** 链接之前添加代理链接 https://ghproxy.com/ ,即 https://ghproxy.com/https://raw.github*** 的形式。以便于在国内的网络环境可以顺利安装:

  • opencv-4.7.0/3rdparty/ippicv 中的.cmake 文件
  • opencv-4.7.0/3rdparty/ffmpeg 中的.cmake 文件
  • (如果用了扩展库的话)opencv_contrib-4.7.0/modules/face 中的 CMakeLists.txt 文件
  • (如果用了扩展库的话)opencv_contrib-4.7.0/modules/xfeatures2d 中的 cmake 文件夹中的文件
  • (如果用了扩展库的话)opencv_contrib-4.7.0/modules/wechat_qrcode 中的 CMakeLists.txt 文件
  • (如果用了扩展库的话)opencv_contrib-4.7.0/modules/cudev 复制到 opencv-4.7.0/modules 中

在 build 文件夹中启动 cmake-gui 开始准备生成编译配置,进入后可以勾选上 GroupedAdvanced 来获得更好的展示效果。

  1. 进入后,分别将源码路径和构建路径指向 sources 和我们新建的 build-mingw64 路径。
  2. 点击左下角的 configure,在弹出的对话框中选择 MinGW Makefiles 和 Specify native compilers,分别把 c 和 c++ 编译器路径指向你的 gcc.exeg++.exe,确保这些 exe 所在的文件夹加到了环境变量里,不然之后会报错,提示另一个文件找不到。finish 后程序会自动生成相关的编译选项。
  3. 在默认选项的基础上,结合网上的一些信息,建议勾选:
    1. BUILD_OPENCV_WORLD。开启后会包含 opencv_world 模块,将各个模块编译成一个 opencv_worldxxx.lib 文件,而不是十几个 lib 库文件。方便之后的部署和使用。
    2. (如果用了扩展库的话)OPENCV_EXTRA_MODULES_PATH:单击这一行后方空白处后,点击后面的三个点,选择 opencv_contrib 文件夹中的 modules 文件夹。
    3. CMAKE_BUILD_TYPE:RELEASE
    4. OPENCV_ENABLE_NONFREE:ON(开启一些有版权的算法的支持)
    5. OPENCV_GENERATE_PKGCONFIG:ON(linux 上或许会有用)
    6. 其他一些涉及到 GPU 环境才需要考虑的选项:
      1. WITH_CUDA:ON
      2. WITH_CUDNN:ON
      3. OPENCV_DNN_CUDA:ON
      4. ENABLE_FAST_MATH:ON
      5. CUDA_FAST_MATH:ON
      6. CUDA_ARCH_BIN:7.5 (因为我的设备是 2080Ti,所以对应的是 7.5,如果没有特殊需要,这里直接指定你的设备对应的数值即可,不然会严重拖慢编译速度)
      7. WITH_CUBLAS:ON
  4. 勾选好后,重新点击 Configure,确保没有红色信息。这些设置好后,点击 Generate 生成 Makefile 文件。
  5. 之后到 mingw-version 文件夹中启动终端,使用电脑上的 make 程序开始编译:
    1. (可选)make clean。每次重新编译时都应该先执行这一句,来清除之前编译的残留
    2. make -j8 这里的 8 是你电脑的核心数量,可以按照实际情况调整。
    3. 无错结束后,执行最后一步:make install
  6. 一切无错后便可以在 Qt 中使用 OpenCV 了。只需要在 pro 配置中的配置好路径即可。可以直接在 qt 项目中,在左栏项目名字上右键中使用“添加库”功能添加外部的库。可以非常方便的添加库文件和 include 路径。

参考资料

  • 我的语雀文档:Ubuntu 18.04编译安装支持CUDA的OpenCV4.6.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/197915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP滑动窗口协议与流量控制

谈到TCP的滑动窗口协议与流量控制,便会想起2006年去华为-3COM(现H3C公司时)面试时的场景。 当年毕业后,刚刚学了一点TCP的皮毛,仅仅是知道了TCP是面向连接的协议,以对每个报文都进行确认超时重传的机制来保…

摸鱼时间,画个吃豆人玩一下

Ⅰ . 吃豆人小游戏 Canvas API(画布)是在 HTML5 中新增的标签用于在网页实时生成图像;是一个非常适合,做一些有趣的小游戏 和 动画;下面我们来简单的写一下 这个小例子 👇 文章目录Ⅰ . 吃豆人小游戏Ⅱ. 实…

学习嵌入式必读十本书,从C语言到ARM

学习嵌入式必读的十本书籍,按照C语言、数据结构、Linux、C、QT、单片机、ARM的顺序给大家推荐。 01 C语言 凡是计算机、电子、通信、自动化、机械专业的同学,大一的时候必学C语言,而且大部分高校选择的教材都是谭浩强。这本书在网上的评价褒…

【计算机程序设计思想与方法】2 什么是计算思维?

1.2 什么是计算思维? 如《【计算机程序设计思想与方法】1 什么是计算?》中所述,计算是利用计算机一步一步地执行指令来解决问题的过程,计算机科学是关于计算的科学。 正如数学家在证明数学定理时,有独特的数学思维。工程师在设计制造产品时,有独特的工程思维。艺术家在…

【验证码逆向专栏】某验“初代”滑块验证码逆向分析

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 本文章未经许可禁止转载…

【算法】递归

目录1.递归概述2.何时使用递归2.1.定义是递归的2.2.数据结构是递归的2.3.问题的求解方法是递归的3.递归模型4.应用本文参考: 《数据结构教程》第 5 版 李春葆 主编 1.递归概述 (1)在定义一个过程或函数时,出现直接或者间接调用自…

【微服务】Elasticsearch文档索引库操作(二)

🚗Es学习第二站~ 🚩Es学习起始站:【微服务】Elasticsearch概述&环境搭建(一) 🚩本文已收录至专栏:微服务探索之旅 👍希望您能有所收获 一.索引库操作 索引库就类似数据库表,mapping映射就类…

DGIOT低代码场景部门的搭建过程

[小 迪 导读] : 通过低代码页面与konva 大屏的页面设计,围绕部门,实现应用场景快速搭建1.部门创建以及权限分配1.1 打开部门管理页面1.2新增部门1.3 权限分配,点击刚创建的部门,在菜单分配中选择总控台和设备管理(低代码平台会过滤掉非低代码…

Wandb:make visualization better than Tensorboard

Wandb:make visualization better than Tensorboard wandb :一个在线的可多人协作的多功能可视化工具包 我最开始使用的tensorboard,还写了一些相关tensorboard的脚本用于实验。tensorboard这里就不详细介绍了,相信大家都比较了解。直到尝试了…

【MySQL数据库入门】:表的约束

表的约束 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务 逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。 表的约束很多,这里主…

版本管理之Git

一.版本控制器的方式1.1集中式版本控制工具集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代 码,是必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库。 举例&#xff1…

巧用回调函数解决微信小程序与后台数据交互出现的异步问题

问题描述 微信小程序端需要发送一个包含文字与图片的表单数据给后端,我一开始的思路是先上传图片得到临时的URL,后执行POST请求将表单数据发送给后端,但后端只能获取到文字,而图片URL却始终获取不到。 问题原因 注意看我上面的思路…

目标检测研究

传统的目标检测流水线 1.候选区域生成 通过滑动窗口选择感兴趣区域Rol;使用多尺寸的输入图像和多尺度的滑动窗口识别多尺度和不同比例的目标。 ⒉特征向量抽取 常用SIFT、 Harr、HOG、SURF。 3.区域分类 常用支持向量机。 结合集成、串联学习、梯度…

3D俯视角色割草游戏模板+视频教程,免费发布 | 一周精品推荐

大家好,我是晓衡。新年开工第一周,我就被热心的开发者们感动得热泪盈眶!今天我冒死推荐几款 Creator 游戏开发资源,希望能对得起这些开发者们,同时也希望你能也有所收获。3D俯视角割草游戏视频源码B 站 UP 主『好巧啊c…

MyBatis 数据查询语句中有关于大于,小于的书写方法 及 查询时相关sql 关键字

前言 提示:这里记录的大概内容: MyBatis 数据查询语句中有关于大于,小于的书写方法 一、MyBatis MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为…

Python封装、继承和多态

Python 语言在设计之初,就定位为一门面向对象的编程语言,“Python 中一切皆对象”。同时,Python 也支持面向对象的三大特征:封装、继承和多态。 一、封装 封装(Encapsulation),即在设计类时&am…

讲师邀请 | 在 DevData Talks,开放务实地聊聊研发效能!

什么是 DevData Talks? DevData Talks 是专注于研发效能实践经验与方法论的系列分享活动。 2022 年,我们既看到外部环境变幻莫测,也看到研发效能领域沉下心来稳步发展,从宏大的概念和价值,转向具体的问题&#xff0c…

若依框架代码自动生成器研究-表查询篇

最近生产环境用了一个开源系统:若依,其中有一个版块很有意思,很能提高生产效率: “代码生成器”。 其功能所处模块菜单为:系统工具->代码生成。我们来研究一下他的代码生成逻辑。 工具使用方法 1、建表 使用代码生成&#…

Python列表中你所不知道的事

1. 引言 目前,Python是世界上使用最广泛、最受欢迎的编程语言之一。Python丰富的功能性使它非常流行,因为我们可以使用它创建任何内容。我将在本博客中与大家分享关于Python列表的几条有趣的花絮。 闲话少说,我们直接开始吧! 2.…

如何高薪入职心仪的公司

序 本文首发自:稀土掘金、思否 我们从几个问题开始入手,来看一下本博客是否适合你: 如果你想要换工作,但是:制作的简历平平无奇如果你想要换工作,但是:投放了的简历总是无法得到 [心仪公司] 的…