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位库文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/675662

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象