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++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO