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如下所示。

Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第1张图片

(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的时候遇到某些函数的功能不太了解,可以直接去官网找到对应版本的说明文档(链接),然后查找关键字就能很快地获取到相关的信息,如下图Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第2张图片

(4)OpenCV_contrib 3.4.11安装

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

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

(1)新建build文件夹

在opencv安装同级目录新建一个build_x64文件夹,方便后续和32位的build夹区分开,如下图
Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第3张图片

(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文件夹,用于存放编译过程产生各种中间文件和最终库文件,如下图
    Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第4张图片

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

  • step 4:等待cmake编译一会儿,当cmake最下方的进度内容最后出现Configuring done就代表配置完成了
    Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第6张图片

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

(1)勾选BUILD_opencv_world这一项,方便之后开发的时候调用一个dll文件就搞定所有库的引用
Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第7张图片
(2)在 search 搜索框输入non,然后勾选找到的 OPENCV_ENABLE_NONFREE 这一项,意思就是使用非开源算法库

Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第8张图片
(3)在 search 搜索框输入mod,然后找到了 OPENCV_EXTRA_MODULES_PATH 这一项,点击这一栏最右边的 弹出对话框,选择我们下载好的 opencv_contrib 文件夹里面的那个 modules 子文件夹即可。这个文件夹里都是非开源的一些实用的算法cpp源文件

Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第9张图片

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

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

Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第10张图片

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

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

Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第11张图片
只需要勾选 ALL_BUILDINSTALLDebug|x64Release|x64 这四项就好了,然后点击生成,等待大概十几二十分钟的样子,整个编译过程就结束了!编译好的库文件和可执行文件分别存放在build_x64\installbuild_x64\bin路径下的。
Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第12张图片

  • step 2:把我们编译好的、存放在 build_x64\install路径下库文件夹includex64复制,然后粘贴到我们最开始安装opencv的 opencv\build 文件夹里面,中间提示什么替换文件之类的,选择替换就好了,没什么影响的,如下图
    Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第13张图片
    Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第14张图片
  • 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文件夹,如下图
Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第15张图片

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

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

然后把

  • where to build the binaries:这一栏的路径改为build_x86,Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第16张图片
  • 再选择Configure,最重要的区别于64位的一步,编译器平台选择 Win 32

Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第17张图片

  • 剩下的什么 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安装目录同级目录下的。
Windows+CMake+VisualStudio2019编译C++的OpenCV+OpenCV_contrib 64位和32位库文件_第18张图片
(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 

#include "opencv2/opencv.hpp" // opencv libraryheader file

#include "opencv2/highgui.hpp"

using namespace std;

using namespace cv; //opencv namespace

int 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

你可能感兴趣的:(开源工具编译,c++,编译器,cmake,opencv)