Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件

2024-02-03 22:50

本文主要是介绍Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 0、速成编译方法
  • 1、软件版本及下载地址
  • 2、软件安装
    • (1)cmake安装
    • (2)Visual Studio 2019安装
    • (3)OpenCV3.4.11安装
    • (4)OpenCV_contrib 3.4.11安装
  • 3、OpenCV 64位库文件编译流程
    • (1)新建build文件夹
    • (2)cmake编译opencv生成visual studio的解决方案 .sln文件
    • (3)Visual studio 2019生成所需要的64位opencv库文件
  • 4、OpenCV 32位库文件编译流程
    • (1)新建build文件夹
    • (2)cmake编译opencv生成visual studio的解决方案 .sln文件
    • (3)Visual studio 2019生成所需要的32位opencv库文件
  • 5、OpenCV 代码测试案例
    • 参考阅读

0、速成编译方法

如果你仅仅是需要用到opencv64位或32位库文件,并不想去了解后面那些繁琐的编译过程,或者按照教程编译遇到问题,没关系嗷,你可以直接下载我编译好的opencv和opencv_contrib库文件压缩包(rar文件约370M),下载地址:交大云盘 、百度云盘(提取码:7357),下载解压后就可以按照第5节的测试案例测试文件是否可用。

1、软件版本及下载地址

以下是本人编译所用版本,供参考,个人认为大版本一致即可,不必一模一样

  • cmake 3.18.2(64位),下载地址:https://cmake.org/files/v3.18/cmake-3.18.2-win64-x64.msi
  • Visual Studio 2019 16.10.1(64位),下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&rel=16
  • OpenCV 3.4.11,下载地址:https://sourceforge.net/projects/opencvlibrary/files/3.4.11/opencv-3.4.11-vc14_vc15.exe/download
  • OpenCV_Contrib 3.4.11,下载地址:https://github.com/opencv/opencv_contrib/releases/tag/3.4.11

2、软件安装

(1)cmake安装

点击下载的 .msi 安装包安装即可,cmake的gui如下所示。

cmakegui

(2)Visual Studio 2019安装

点击安装包选择安装路径即可,安装组件需要勾选 使用C++的桌面开发,以确保安装C++编译所需环境

(3)OpenCV3.4.11安装

点击下载好的安装包自动解压即可,这个安装包本质就是一个压缩文件,解压后得到cpp源文件和预先build好的dll和lib库文件,以及需要的include头文件,但是这些库文件和头文件都是基本的开源库,如果需要用到SURF、SIFT特征匹配的就需要编译后续的OpenCV_contrib库。我自己解压安装到的文件夹路径是E:\3D_R\Software\OpenCV_x64

个人经验:在初学opencv的时候遇到某些函数的功能不太了解,可以直接去官网找到对应版本的说明文档(链接),然后查找关键字就能很快地获取到相关的信息,如下图请添加图片描述

(4)OpenCV_contrib 3.4.11安装

不需要安装,把github下载的包解压就完事了,把它解压到和opencv安装的同级目录,看着舒服一点

3、OpenCV 64位库文件编译流程

(1)新建build文件夹

在opencv安装同级目录新建一个build_x64文件夹,方便后续和32位的build夹区分开,如下图
请添加图片描述

(2)cmake编译opencv生成visual studio的解决方案 .sln文件

  • step 1: Where is the source code: 这一栏就点击右边Browse source选择opencv安装路径里面的sources文件夹,了解C++编译过程的朋友们知道这一步就是选择包含cpp源文件和CMakeLists文件的文件夹,如下图

  • step 2:Where to build the binaries: 这一栏就选择上一步新建的build_x64文件夹,用于存放编译过程产生各种中间文件和最终库文件,如下图
    请添加图片描述

  • step 3:点击Configure按钮会弹出对话框,要你配置编译器和各项参数,首先配置编译器,默认的generator就是安装的Visual Studio 16 2019,选择平台为 x64,因为我们要编译的是64位的库文件嘛,最后点击Finish ,此时cmake开始配置编译所需文件,如下图
    请添加图片描述

  • step 4:等待cmake编译一会儿,当cmake最下方的进度内容最后出现Configuring done就代表配置完成了
    请添加图片描述

  • step 5:由上图可以看到configuring done结束后,上方有很多红色项,这里面就是cmake编译的一些配置条件,了解cmake原理的知道这些选择项都是来自于sources文件夹里的那个CMakeLists.txt。因为我们需要把opencv_contrib里面的非开源算法都编译好,所以这时需要做三步:

(1)勾选BUILD_opencv_world这一项,方便之后开发的时候调用一个dll文件就搞定所有库的引用
请添加图片描述
(2)在 search 搜索框输入non,然后勾选找到的 OPENCV_ENABLE_NONFREE 这一项,意思就是使用非开源算法库

请添加图片描述
(3)在 search 搜索框输入mod,然后找到了 OPENCV_EXTRA_MODULES_PATH 这一项,点击这一栏最右边的 弹出对话框,选择我们下载好的 opencv_contrib 文件夹里面的那个 modules 子文件夹即可。这个文件夹里都是非开源的一些实用的算法cpp源文件

请添加图片描述

  • step 6:再次点击 Configure 配置一遍,这一步也需要等待一会儿,直到读条结束,出现configuring done。和 step 4 的图一样的,这儿就不放图了

  • step 7:点击 Generate 等待一小会儿,出现 Generating done 就生成 .sln 解决方案了。这个时候可以在 build_x64 文件夹里面看到 OpenCV.sln 文件了,如下图

请添加图片描述

(3)Visual studio 2019生成所需要的64位opencv库文件

  • step 1:打开 OpenCV.sln 解决方案,点击菜单栏的 生成 选择 批生成,直接批量生成我们需要的 DebugRelease模式下的opencv库文件

请添加图片描述
只需要勾选 ALL_BUILDINSTALLDebug|x64Release|x64 这四项就好了,然后点击生成,等待大概十几二十分钟的样子,整个编译过程就结束了!编译好的库文件和可执行文件分别存放在build_x64\installbuild_x64\bin路径下的。
请添加图片描述

  • step 2:把我们编译好的、存放在 build_x64\install路径下库文件夹includex64复制,然后粘贴到我们最开始安装opencv的 opencv\build 文件夹里面,中间提示什么替换文件之类的,选择替换就好了,没什么影响的,如下图
    请添加图片描述
    请添加图片描述
  • step 3:把 build_x64\bin\ Debug里面的zlibd1.dll,opencv_world3411d.pdb 以及Release 文件夹的 zlib1.dll,opencv_world3411.pdb 都复制粘贴到opencv安装目录的 opencv\build\x64\vc16\bin文件夹里面,尤其是 zlibd1.dllzlibd.dll 两个文件,如果不复制粘贴到 bin文件夹里面去的话,后续在VS的Debug模式下就没办法成功运行,就会提示 找不到zlibd1.dll,请尝试重新安装 这样的错误!请务必注意这一点。至此64位库文件编译彻底结束。

4、OpenCV 32位库文件编译流程

(1)新建build文件夹

这部分内容其实就一个地方和64位的有区别,其它的步骤都是一模一样的,在opencv安装路径同级目录新建一个build_x86文件夹,如下图
请添加图片描述

(2)cmake编译opencv生成visual studio的解决方案 .sln文件

所有步骤与64位配置方法相同,但是注意,如下图,首先选择菜单栏的File,然后Delete Cache,把编译64位过程的缓存信息清空掉,免得后期出岔子。

然后把

  • where to build the binaries:这一栏的路径改为build_x86,请添加图片描述
  • 再选择Configure,最重要的区别于64位的一步,编译器平台选择 Win 32

请添加图片描述

  • 剩下的什么 nonfreemodulesconfiguregenerate流程和64位编译过程一模一样,切记,每一步都要一致,最后就能在build_x86里面看到 32位的opencv .sln文件了!

(3)Visual studio 2019生成所需要的32位opencv库文件

  • 按照与64位相同的批生成处理步骤,生成32位的库文件。

  • 与64位复制粘贴那一步相同,但是仅需要把32位 build_x86\install 路径下的 x86文件夹复制粘贴到opencv\build 文件夹里面,include不复制粘贴是因为64位和32位头文件是一模一样的,都是.h文件嘛,没必要再复制粘贴了。

  • 再把build_x86\bin\ DebugRelease 文件夹里面的opencv_world3411d.pdbopencv_world3411.pdb 复制粘贴到opencv安装目录的 opencv\build\x64\vc16\lib文件夹里面,一是为了保持和官方build后的文件夹内容一模一样,32位编译过程到此结束。

5、OpenCV 代码测试案例

(1)VS2019新建一个空项目,名称我取的opencvtest,放在opencv安装目录同级目录下的。
请添加图片描述
(2)添加包含文件和库文件,步骤如下【注意:下面用到的路径都是在opencv安装目录相关的路径,与之前build 64和32位的编译路径没关系了】:

  • 菜单栏 【项目】->【属性】,打开项目的属性页
  • 左上角配置选择对应的编译模式(DebugRelease),我选择的是Debug模式,平台我选择的是WIN32
  • 点击左侧选项卡【VC++目录】,右边找到【包含目录】,添加编译好的opencv的头文件,我的路径为 E:\3D_R\Software\OpenCV_x64\opencv\build\include ,就是之前我们编译复制粘贴到opencv安装目录里的include头文件文件夹;【VC++目录】,右边找到【库目录】,添加编译好的 32位 opencv3411d.lib 文件所在的文件夹路径,即 E:\3D_R\Software\OpenCV_x64\opencv\build\x86\vc16\lib
  • 点击左侧选项卡【C/C++】,右侧第一行【附加包含目录】添加同上的 include 路径:E:\3D_R\Software\OpenCV_x64\opencv\build\include
  • 点击左侧选项卡【链接器】->【常规】,找到右侧【附加库目录】,添加lib路径: E:\3D_R\Software\OpenCV_x64\opencv\build\x86\vc16\lib
  • 点击左侧选项卡【链接器】->【输入】,找到右侧【附加依赖项】,将编译好的32位 opencv3411d.lib 文件名添加进去,即:opencv3411d.lib。(如果在Debug 模式下运行,就添加末尾带d的opencv3411d.lib的库文件,如果是Release模式,就添加末尾没有d的opencv3411.lib文件,d代表debug模式,没毛病吧)

(3)测试代码,读入图片并显示:

#include <iostream>#include "opencv2/opencv.hpp" // opencv libraryheader file#include "opencv2/highgui.hpp"using namespace std;using namespace cv; //opencv namespaceint main()
{Mat testimage = imread("E:\\3D_R\\Software\\OpenCV_x64\\cmakegui.jpg");//图片路径自己随便改imshow("test", testimage);waitKey(0);return 0;
}

参考阅读

[1]:https://blog.csdn.net/weijifen000/article/details/93377143

这篇关于Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_43732157/article/details/118727207
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/675662

相关文章

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

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

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

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五