windows 编译 opencv

news2024/9/23 12:29:53

编译需要的基础工具
#cmake是配置构建工具,mingw是编译工具

cmake

CMake是一款跨平台的编译管理工具,可以自动生成各种不同编译环境(如Makefile、Visual Studio Solution等),从而实现在不同平台上进行代码编译的目的。CMake提供了一种简单的语法描述(CMakeLists.txt文件)来描述构建过程,并通过生成相应的构建脚本来完成编译构建过程。CMake主要被用于C++的工程管理和构建,但也可以用于其他语言。

cmake下载地址: https://cmake.org/download/

  1. 下载zip版本“cmake-3.xx-win64-x64.zip”
  2. 解压到指定目录并添加bin所在目录到环境变量。
  3. 在终端输入“cmake --help”或 “cmake --version”查看是否配置成功。

mingw

mingw-W64 是一款用于 Windows 操作系统的开源 C/C++ 编译器集合,它完全兼容 GNU 工具集,可以在 Windows 平台上编译出可以在 Windows、Linux 和 macOS 等操作系统上运行的可执行文件。 mingw-W64 可以生成 32 位和 64 位应用程序,同时还支持 Windows API、POSIX API 和 OpenMP。

mingw-W64下载链接:https://sourceforge.net/projects/mingw-w64/files/

  1. 推荐下载 离线版本“x86_64-posix-seh”

  2. 解压到指定目录并将bin目录加入到环境变量

  3. 在终端输入 “gcc --version”。查看是否安装成功。

opencv

下载链接:https://opencv.org/releases/

本次 Windows 环境的安装,因此下载OpenCV-4.6.0 Windows 版。

准备文件

双击下载好的exe文件,程序会生成 opencv 文件夹。
这个 opencv 文件夹就是我们后面的编译源文件。
新建一个文件夹 build_for_vscode ,用于存放我们后面的编译结果。

1. 配置

打开 cmake 的编译配置软件:
我的软件路径是 D:\appdata\cmake\cmake-3.26.0-rc2-windows-x86_64\bin\cmake-gui.exe
下面的步骤不同情况可能先后顺序不一样,但是配置过程一致。

  1. 双击 cmake-gui.exe 开始配置。

  2. 将opencv中的sources文件添加进来
    对于 where is the souce code:选择前面 opencv 原文件下到 sources 位置
    对于 where is build the binaries:选择新建的编译结果保存文件夹

  3. 点击 configure 开始配置
    在弹出的界面中:
    Specify the generator for the project中选择:
    MinGw makefiles
    Specify native compilers
    next

  4. 配置编译器 mingw
    C : D:/appdata/mingw64/bin/gcc.exe
    C++:D:/appdata/mingw64/bin/g++.exe
    点击Finish开始配置

  5. 假设你配置完全OK了,也就是 cmake-gui.exe 下面的配置输出没有任何标红出现。那么 Configuring done (7.2s) 后再点击 generate,出现Generating done (2.8s)。配置就结束了。下一步就是编译。

如果配置存在问题,请看本篇博文最后。

成功界面应该没有任何标红,如图:

2.编译

编译过程简单得多,直接在终端打开上面的配置输出目录:
编译:
mingw32-make

编译加速:
mingw32-make -j16

成功如图:

安装:
mingw32-make install

配置过程的其他问题

出现问题后可以在编译结果 CMakeDownloadLog.txt 中查看详细信息。这里主要记录一些坑。

坑一

最为经典的一个报错:FFMPEG下载失败,这是因为需要访问外网引起的
办法:
翻墙下载离线文件,替换源代码中“opencv/sources/.cache/ffmpeg”下的 0KB 空文件。
用后面三个我自己下载的有内容的文件,替换没有内容的 0KB 空文件。

注意保留文件名替换,替换后如图:

三个文件的下载链接其实就在CMakeDownloadLog.txt 报错信息中,但科学上网才能下载。如果没有条件,这个有一个不用科学上网的分享。
FFMPEG下载失败以及分享:https://www.codenong.com/cs109394452/
坑:ffmpeg_version.cmake 不要复制保存,要将整个文件从网页下载重命名。
附,三个文件科学上网下载地址:
opencv_videoio_ffmpeg_64.dll下载地址:https://raw.githubusercontent.com/opencv/opencv_3rdparty/65ec04d4573dcdfa4531f0b9e67f35d8ffff873e/ffmpeg/opencv_videoio_ffmpeg_64.dll

opencv_videoio_ffmpeg.dll下载地址:
https://raw.githubusercontent.com/opencv/opencv_3rdparty/65ec04d4573dcdfa4531f0b9e67f35d8ffff873e/ffmpeg/opencv_videoio_ffmpeg.dll

ffmpeg_version.cmake下载地址:
https://raw.githubusercontent.com/opencv/opencv_3rdparty/65ec04d4573dcdfa4531f0b9e67f35d8ffff873e/ffmpeg/ffmpeg_version.cmake

坑二:配置(configure)时总是找到anaconda下面的python版本,标红说python版本不合适,最后编译不通过

不管是何种情况,我现在的配置是和anaconda 没有关系的,但配置过程却总是找到ananconda的二进制文件,比如 PYTHON 版本警告。
办法:系统环境变量 PATH 删除一切关于anaconda的环境变量,同时!!!必须重启电脑!坑!

编译过程的其他问题

问题:CMakeFiles\opencv_highgui.dir/objects.a(moc_window_QT.cpp.obj)
办法: https://blog.csdn.net/qq_21555569/article/details/122776588

问题:opencv编译时,想要的环境似乎没有找到
办法:环境变量设置好了以后,一定要重启电脑

问题:编译速度慢
办法:查看电脑CPU数量,在命令mingw32-make加上j16 -------> mingw32-make -j 16

问题:使用-j16后报错不一样
办法:先用命令mingw32-make -j16 快速编译一遍,然后去掉j16再编译一次,就能快速看到详细报错

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

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

相关文章

PLC与无线开关量测控终端之间Modbus通信实例

本方案是基于Modbus RTU协议下实现的1主多从自组网无线通信形式,主站为S7-1200 PLC,DTD433H作为从站。DTD433H具备输入和输出开关量信号功能,信号传输方向由用户原系统主从设备所实现的功能决定。方案中采用无线开关量信号测控终端DTD433H与欧…

python调用海康sdk报错问题

sdk参考: (68条消息) Python调用海康威视网络相机_调用海康SDK_python 海康威视_有一点点麻瓜的博客-CSDN博客https://blog.csdn.net/yinweizhehd/article/details/118722052 报错1: 生成解决方案的时候,显示LNK2001:无法解析的…

【AI大模型】SparkDesk讯飞星火认知大模型震撼发布,国产AI技术再创新高!

文章目录 前言SparkDesk讯飞星火认知大模型简介语言理解知识问答逻辑推理数学题解答代码理解与编写亲自体验写在最后 前言 5月6日,讯飞星火认知大模型成果发布会在安徽合肥举行。科大讯飞董事长刘庆峰、研究院院长刘聪发布讯飞星火认知大模型,现场实测大…

C++面向对象编程

面向对象编程 面向对象编程和面向过程编程面向过程面向对象 类型设计类的成员函数对象的创建和使用C对象模型this指针构造函数和析构函数构造函数定义和使用析构函数的定义和使用 对象的生存周期拷贝构造函数深拷贝与浅拷贝 运算符的重载 面向对象编程和面向过程编程 面向过程…

设计模式之【适配器模式】,两个人之间确实需要月老的搭线~

文章目录 一、什么是适配器模式1、适配器模式使用场景2、代理、桥接、装饰器、适配器 4 种设计模式的区别3、适配器模式结构 二、类适配器1、实例 三、对象适配器1、实例 四、接口适配器1、实例 五、源码中的应用 一、什么是适配器模式 适配器模式(Adapter Design …

第2天学习Docker——Docker安装

一、前言 Docker 是一个用于开发、传送和运行应用程序的开放平台。Docker 使您能够将应用程序与基础设施分开,以便您可以快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础设施。通过利用 Docker 的快速交付、测试和部署代码的方法&#xff0…

vue3学习一 setup

vue3中没有 data 等配置项, 并且它的引入方式也不是像vue2中的 import vue就可以了, 而是用到什么再引入什么, 其中 setup() 函数, 是最大的区别 vue3中的 setup 有点像vue2中的 data , 但又不完全是 setup 会在 生命周期create…

关于C语言

C99是啥 很多书籍开篇会突然提到C99标准,因此这里搜了一下。 C99是C语言的官方标准第二版。1999年12月1日,国际标准化组织和国际电工委员会旗下的C语言标准委员会正式发布了这个标准文件 ; C99是在C89和C90的基础上发展起来的,增加…

独立站平台选哪个好?5个独立站平台优缺点分析

选择适合自己的独立站平台需要综合考虑多个方面的因素,包括平台的优缺点、自己的需求和预算等因素。下面是几个常见的独立站平台的优缺点分析供您参考: 一、Shopify: 优点:简单易用,拥有丰富的主题和应用程序&#xf…

JavaScript实现求1-100之间不能被3整除的数之和,求100以内偶数的和的两个程序代码

以下为实现求1-100之间不能被3整除数之和求100以内偶数的和的两个程序代码和运行截图 目录 前言 一、实现输入两个数比较两个数的大小 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 二、求100以内偶数的和 2.1 运行流程及思想 2.2 代码段 2.3…

泰坦尼克号幸存者预测(案例)----决策树版

1、导入需要的库 import pandas as pd from sklearn.tree import DecisionTreeClassifier import matplotlib.pyplot as plt from sklearn.model_selection import GridSearchCV2、导入数据 在此下载泰坦尼克号训练数据 data pd.read_csv(r"F:\data\train1.csv") …

内网安全:Cobalt Strike 安装.

内网安全:Cobalt Strike 安装. Cobalt Strike是一款渗透测试神器(又称为CS)。拥有多种协议主机上线方式,集成了端口转发,socket代理,office攻击,文件捆绑,钓鱼,提权&…

哈希算法原理与应用:确保数据完整性和安全性的关键技术

哈希算法是一种将任意长度的消息映射为固定长度摘要或哈希值的算法。哈希算法主要被用于验证数据的完整性和安全性。哈希算法的应用广泛,例如在密码学中用于验证数据完整性和数字签名,也用于检索数据和进行散列分布式存储。下面将详细介绍哈希算法的原理…

《Linux 内核设计与实现》12. 内存管理

文章目录 页区获得页获得填充为 0 的页释放页 kmalloc()gfp_mask 标志kfree()vmalloc() slab 层slab 层的设计slab 分配器的接口 在栈上的静态分配单页内核栈 高端内存的映射永久映射临时映射 每个 CPU 的分配新的每个 CPU 接口 页 struct page 结构表示系统中的物理页&#x…

区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测

区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测…

超级详细的 FinalShell 安装 及使用教程

一、引言 FinalShell 是一款免费的国产的集 SSH 工具、服务器管理、远程桌面加速的良心软件,同时支持 Windows,macOS,Linux,它不单单是一个 SSH 工具,完整的说法应该叫一体化的的服务器,网络管理软件,在很大程度上可以…

新唐NUC980使用记录(5.10.y内核):在用户应用中使用GPIO

文章目录 目的使用参考与演示使用参考存在的问题问题定位修改设备树使用测试 总结设备树文件内容 目的 GPIO是最基础的外设,使用频率也非常高,这篇文章将简单体验在NUC980 Liunx用户应用中使用GPIO功能。 这篇文章中内容均在下面的开发板上进行测试&am…

【java EE】Redis基础

Redis基础 业务中会遇到的问题: 数据量巨大数据模式的不确定性数据的频繁读数据的频繁更改大量数据的统计分析 集中数据库的特点 Redis简介: Redis(Remote Dictionary Server)是一个使用ANSI C语言编写的开源数据库高性能的 …

解密Web自动化测试:你需要了解的四大难点

B站首推!2023最详细自动化测试合集,小白皆可掌握,让测试变得简单、快捷、可靠https://www.bilibili.com/video/BV1ua4y1V7Db 目录 前言 问题1:测试稳定性 问题2:测试可维护性 问题3:测试性能 问题4&am…

阿里熔断限流框架Sentinel实现流程和动态规则数据源

文章目录 1.简单介绍2.使用示例3.主要实现原理和组成部分4.动态规则数据源 本篇文章主要介绍熔断限流框架Sentinel的使用示例、组成原理和动态规则数据源的实现原理。 1.简单介绍 阿里的熔断限流框架Sentinel基于滑动时间窗口实现熔断限流管控的,支持多样的管控场景…