OpenCV(一) OpenCV安装流程及从源码编译方法 + 配置VS

2023-05-16

 

转自:https://blog.csdn.net/jayoungo/article/details/81032253

这一篇也总结的比较好:https://blog.csdn.net/u012462822/article/details/49100025

本篇文章记录了安装OpenCV 3.4.2及配置VS2017的方法,以及利用CMake从源码编译适用于老版本VS2013的OpenCV 3.4.2的编译及配置流程(可选Contrib模块)。本文也可以作为其他OpenCV及VS版本安装配置方法的参考。

注:OpenCV的Contrib模块必须手动编译,请直接查看本文第3节“3 从源码编译并配置OpenCV”。

1 安装OpenCV 3.4.2

 

从OpenCV官网下载安装包:https://opencv.org/releases.html

双击安装:即解压文件到指定文件夹

注:安装程序会自动创建“opencv”文件夹


“sources”文件夹里面是源代码以及示例程序“samples”、文档“doc”等

“build”文件夹包含编译好的库文件,可以直接配置使用

在“build”文件夹内,“include”里面是头文件,“x64”文件夹里面是64位编译器生成的动态链接库文件(包括vc14,vc15版本)

注:vc10对应VS2010,vc11对应VS2012,vc12对应VS2013,vc14对应VS2015,vc15对应VS2017。

注:如果需要使用静态链接库或者在其他版本的VS中使用,则需要手动编译。

2 配置OpenCV 3.4.2 + VS2017
 

2.0 配置环境变量(重启电脑生效)
在系统桌面的“此电脑”图标上右击,依次选择“属性 - 高级系统设置 - 环境变量”

在下方的系统变量中找到Path变量,双击打开,添加OpenCV动态链接库的路径:

[OpenCV安装路径]\opencv\build\x64\vc15\bin
注:按照自己OpenCV实际的安装路径值替换上面的“[OpenCV安装路径]”字符串。

注:对于动态编译生成的可执行文件,其运行时需要依靠该环境变量找到“.dll”动态链接库文件所在地址进行函数和数据的动态调用。

 

然后需要对VS2017开发环境进行设置,使VS能找到调用OpenCV所需要的头文件和库文件。

 

2.1 永久生效的配置方法
这种配置方法对VS创建的所有项目都有效,并且所修改的配置文件会被不同版本的VS共用。

1. 用VS2017任意打开或创建一个C++项目,依次点击“视图”-“属性管理器(M)”

注:对于VS2013,依次点击“视图”-“其他窗口”-“属性管理器”

2. 在打开的属性管理器窗口中,展开“Debug|x64”节点,双击“Micorsoft.Cpp. x64.user”,打开全局属性的设置窗口:

2.1. 在左边选择“VC++目录”

在右边“包含目录”中添加OpenCV的头文件目录:

[OpenCV安装路径]\opencv\build\include
在右边“库目录”中添加OpenCV的链接库目录:

[OpenCV安装路径]\opencv\build\x64\vc15\lib
2.2. 在左边选择“链接器 - 输入”

在右边“附加依赖项”中添加OpenCV的库文件名:

opencv_world342.lib
opencv_world342d.lib
注:含后缀“d”代表Debug版本。
注:属性管理器窗口中的“Release|x64”节点的“Micorsoft.Cpp. x64.user”项同Debug节点项,不需要再次配置。

添加完成后,右击“Micorsoft.Cpp. x64.user”,选择“保存”即可。

 

2.2 单次生效的配置方法
这种配置方法只对当前所配置的项目有效。

依次点击“项目 - 属性”(或者在项目名称上右击,选择“属性”)

在打开的项目属性页进行“包含目录,库目录,附加依赖项”的配置,配置方法同前文2.1 永久生效的配置方法所述。

 

2.3 生成配置文件的配置方法(推荐)
这种配置方法创建配置文件并保存,每次只在需要OpenCV的项目中添加配置文件即可。

 

1. 在VS2017中任意打开或创建一个C++项目,依次选择“视图”-“属性管理器(M)”

2. 在属性管理器的“Debug|x64”项右击,选择“添加新项目属性表”

自行设定名称和路径(方便之后的OpenCV项目寻找使用),并点击”添加“(如:OpenCV3.4.2_VS2017_x64.props)

3. 双击“Debug|x64 - OpenCV3.4.2_VS2017_x64.props”

在打开的属性页进行“包含目录,库目录,附加依赖项”的配置,配置过程同前文2.1 永久生效的配置方法所述

配置完成后,右击“OpenCV3.4.2_VS2017_x64.props”,选择“保存”即可

然后,按下一条“4.”所述为该项目的“Release|x64”项添加刚才创建的配置文件,使该项目在Debug和Release模式下均可使用OpenCV库。

4. 之后创建OpenCV项目时,直接在“属性管理器”窗口的“Debug|x64”(以及“Release|x64”)项右击,选择“添加现有属性表”,找到之前保存的配置文件“OpenCV3.4.2_VS2017_x64.props”,并“打开”即可。

 
3 从源码编译并配置OpenCV
本节以编译并配置适用于VS2013的OpenCV 3.4.2为例。

注1:若需要联合编译Contrib模块,请首先下载对应OpenCV版本的Contrib模块源文件并解压:

https://github.com/opencv/opencv_contrib/releases

注2:编译Debug版本的OpenCV的Python接口时,需要“python[版本号]_d.lib”库文件。因此,在安装Python时应选择自定义安装选项并勾选安装其Debug组件(若之前没有安装,可以直接打开同版本的Python安装包,选择“Modify”进行附加安装)

 

1. 使用CMake从源码构建VS工程
首先安装CMake:https://cmake.org/download

1.1. 打开“cmake-gui.exe”程序

Where is the source code:填写OpenCV安装(解压)后的“sources”文件夹地址(包含CMakeLists.txt文件)

新建一个文件夹(如“[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64”),用于存放CMake使用OpenCV源码构建的VS工程,将其路径填入Where to build the binaries

 

1.2. 点击配置“Configure”

选择Visual Studio 12 2013 Win64(如果选择Visual Studio 12 2013选项,则会构建Win32项目),然后点击“Finish”,CMake自动开始检测计算机环境、下载依赖项。

等待配置完成后(此过程受网络状况影响,可能时间较长),窗口的框内整个显示红色,此时可以对编译参数进行个性化配置:

注1:若要将以上所有库文件打包,生成单一的“world”库(使用方便,但文件较大),请勾选“BUILD_opencv_world”选项。

注2:若要联合Contrib模块编译,请在OPENCV_EXTRA_MODULES_PATH参数处粘贴本节开始时下载的Contrib源文件的modules文件夹路径。

或直接略过配置过程即可。

再次点击“Configure”,等待进度条完成且红色消失即表示配置成功。

1.3. 点击“Generate”

开始生成解决方案,下方的信息栏输出“Generating done”表示创建成功。

点击“Open Project”选择VS2013打开(或使用VS2013打开解决方案中的“.sln”文件),即可进入VS界面。

 

2. 在VS2013中编译生成库文件
2.1. 在Solution Explorer(解决方案资源管理器)中,右键“CMakeTargets/ALL_BUILD”,选择生成(Build)

完成之后,将在以下目录看到生成的动态链接库文件:

[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\bin\Debug
[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\lib\Debug
2.2. 右键“CMakeTargets/INSTALL”,选择生成(Build)

这是为了将所有的头文件和库文件集中到一起,便于管理和使用。

完成之后,将在以下目录看到库文件:

[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\install\x64\vc12\bin
[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\install\x64\vc12\lib
2.3. 将Debug模式修改为Release模式,重新执行上面两步2.1.和2.2.

3. 配置OpenCV与VS
 

3.1. 添加系统环境变量

 

按照前述2.0 配置环境变量添加以下环境变量:

[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\install\x64\vc12\bin
3.2. 属性配置

按照前述2.1或2.2或2.3配置以下内容:

包含目录:

[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\install\include
库目录:

[OpenCV安装路径]\opencv\opencv3.4.2_vs2013_x64\install\x64\vc12\lib
附加依赖项:

opencv_calib3d342.lib
opencv_calib3d342d.lib
opencv_core342.lib
opencv_core342d.lib
opencv_dnn342.lib
opencv_dnn342d.lib
opencv_features2d342.lib
opencv_features2d342d.lib
opencv_flann342.lib
opencv_flann342d.lib
opencv_highgui342.lib
opencv_highgui342d.lib
opencv_imgcodecs342.lib
opencv_imgcodecs342d.lib
opencv_imgproc342.lib
opencv_imgproc342d.lib
opencv_ml342.lib
opencv_ml342d.lib
opencv_objdetect342.lib
opencv_objdetect342d.lib
opencv_photo342.lib
opencv_photo342d.lib
opencv_shape342.lib
opencv_shape342d.lib
opencv_stitching342.lib
opencv_stitching342d.lib
opencv_superres342.lib
opencv_superres342d.lib
opencv_video342.lib
opencv_video342d.lib
opencv_videoio342.lib
opencv_videoio342d.lib
opencv_videostab342.lib
opencv_videostab342d.lib
注:请按照本机实际的安装路径进行配置。

注:以上的“附加依赖项”只针对“OpenCV 3.4.2”,其他版本的库名需要根据实际名称进行修改。

 

4 安装配置的测试
注:本篇文章前述安装及配置的都是“x64”版本的动态链接库。因此,调用OpenCV的VS2017工程应该设置为使用“x64”编译器进行编译:

VS2013创建的“Win32控制台应用程序”转为“x64”编译器的方法:

下拉编译器设置,选择“配置管理器”

在“活动解决方案平台”项下拉,选择“新建”,在“键入或选择新平台”处下拉,选择“x64”,点击确定。

1. 在已经配置OpenCV的VS项目中添加源文件,编码如下内容:

#include <iostream>//C++输入输出库头文件
#include <opencv2\core\core.hpp>//OpenCV核心库头文件
#include <opencv2\highgui\highgui.hpp>//OpenCV图形处理头文件
 
using namespace std;
 
int main()
{
    //窗口名称
    string windowName = "HelloWorld";
    //图像名称
    string imgName = "CR7.jpg";
 
    //读入图像
    cv::Mat image = cv::imread(imgName, CV_LOAD_IMAGE_COLOR);
    //如果无法读取图像
    if (!image.data)
    {
        cout << "无法打开图像文件!" << endl;
        system("PAUSE");//暂停窗口
        return -1;
    }
 
    //创建一个新窗口
    cv::namedWindow(windowName, CV_WINDOW_AUTOSIZE);
    //将图像显示都新创建的窗口中
    cv::imshow(windowName, image);
    //等待,直到用户按任意键时退出
    cv::waitKey(0);
 
    return 0;
}
注:请将图片放入项目源文件所在文件夹,或者在程序中使用绝对路径。

2. 编译项目并运行,正确显示图像窗口:


————————————————
版权声明:本文为CSDN博主「jayoungo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jayoungo/article/details/81032253

 

重启电脑,就可以正常运行

如果没有重启电脑,运行项目时容易出现找不到文件opencv_core.dll文件,重启后就好了。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV(一) OpenCV安装流程及从源码编译方法 + 配置VS 的相关文章

  • 2、可迭代对象与迭代器

    1 Iterable 可迭代对象 概念 xff1a python中能够使用for循环遍历的都是可迭代对象 1 常见的可迭代对象 1 1 序列如 xff1a list str tuple range 1 2 非序列 xff1a dict se
  • 帮你分清嵌入式与单片机

    从事计算机和或电子行业相关领域工作的朋友 xff0c 一般都听说过单片机和嵌入式 但是要问单片机和嵌入式两者之间有什么联系 xff0c 大多数人都不能很好的解释清楚 想要弄清楚嵌入式和单片机有什么联系 xff0c 首先就要弄明白什么是嵌入式
  • [MM32生态]Python,让嵌入式应用开发更便捷、更高效、更专注

    前言 前面分享了基于PikaScript如何在MM32平台上部署Python开发环境的帖子 xff0c 实现了Python基础开发环境的部署 xff0c 可以通过串口终端软件在线编写Python xff0c 然后直接运行得到结果 通过Pyt
  • [STM32]STM32移植freemodbus实现modbusTCP

    上次说到采用STM32F1移植了FreeModbus协议栈进行开发实现ModBus RTU协议来进行一些线圈寄存器的控制 xff08 继电器开关 xff09 和一些保持寄存器的读写 xff08 参数配置灯 xff09 xff0c 这次说一下
  • FR8012HAQ利用ADC实现检测电池电压检测的解决方案

    今天要跟大家分享的是FR8012HAQ利用ADC实现检测电池电压检测的解决方案 FR8012HAQ是富芮坤的一款通用蓝牙芯片 特性介绍如下图 xff1a 我们再来看FR8012HAQ的PMU xff0c 它强大的地方还在于内置了充电模块 F
  • [单片机芯片]CH32V307驱动单总线温湿度传感器DHT22

    手头有一个DHT22温湿度传感器和CH32V307开发板 xff0c 可玩性极强 DHT22是已校准的数字温湿度传感器 xff0c 用于检测环境温湿度 xff0c 采用DHT22 AM2302 xff0c 标准单总线接口 拥有比常见的DHT
  • RT_Thread好用吗? RT_Thread成国内最成熟开源RTOS?

    RT Thread 是一款主要由中国开源社区主导开发的开源实时操作系统 许可证GPLv2 实时线程操作系统不仅仅是一个单一的实时操作系统内核 xff0c 它也是一个完整的应用系统 xff0c 包含了实时 嵌入式系统相关的各个组件 xff1a
  • [技术讨论]知识科普のARM和STM32之间的纠葛

    一 ARM和STM32的关系 ARM和STM32是两个不同的概念 xff0c ARM是一家英国公司 xff0c 专注于设计和许可处理器架构 xff0c 而STM32是ST公司基于ARM Cortex M内核的一系列微控制器产品 ARM Co
  • 嵌入式经历了哪些发展阶段?这些嵌入式法则你都了解吗?

    为增进大家对嵌入式的认识 xff0c 本文将对嵌入式发展阶段以及嵌入式中的一些法则予以介绍 嵌入式已经是现在的主流系统以及开发手段之一 xff0c 嵌入式工程师更是占据了一席之地 为增进大家对嵌入式的认识 xff0c 本文将对嵌入式发展阶段
  • 【技术分享】GD32硬件I2C调试中的问题与解决过程-续

    使用GD32303C EVAL开发板和MPL3115A2模块测量气压或高度数据 xff0c 两者间使用硬件I2C进行通讯 上次调试发现官方例程 xff08 单一I2C读写功能 xff09 可以正常读写MPL芯片的寄存器 xff0c 而我建立
  • [技术问答]HC32F460 是否有 RTC?在电池供电方案中该如何使用?

    背景 RTC xff0c 学名实时时钟芯片 xff0c 它是日常生活中应用较为广泛 xff0c 不管是消费类还是工业类的电子产品基本都要求带有时钟 日历或闹钟功能 xff0c 它为人们提供精确的实时时间 或者为电子系统提供精确的时间基准 实
  • 2021年本四小厂面试总结

    菜鸡小厂工程师 xff0c 还是徘徊在一万上下 xff0c 希望今年能拿到20k以上 2021 9 4更新 五月 汇丰 xff1a 1 kotlin 的 apply let 有什么区别 返回的是什么参数或者句子 kotlin作用域函数 ru
  • 关于STL的vector与OpenCV的Mat初始化问题记录

    问题情形 xff1a 需要记录不同的两个Opencv的Mat矩阵 xff0c 由于数量是动态确定的 且很可能 gt 4个 xff0c 所以想通过构建cv Mat的容器来保存结果 同时 xff0c 每个Mat必须初始化为0矩阵且分配内存 错误
  • reStructuredText 、Sphinx 资料汇总

    reStructuredText 用 reStructuredText 写作 xff1a 快速入门指南 reStructuredText rst 快速入门语法说明 reStructuredText rst 语法规则快速入门 在线 reStr
  • 300个韩国网站欣赏

    300个韩国网站欣赏 http www homepg co kr http www yoondesign com http www rodingallery org http www toyota co kr HYUNDAI http ww
  • 使用WinRAR来创建分卷压缩包

    因为科研需求 xff0c 需要将数据备份到百度云盘 xff0c 但很多数据量很大 xff0c 单个文件超过了20G xff0c 因此 xff0c 没有办法直接上传到百度云盘上去 xff0c 如下图 为了解决这个问题 xff0c 考虑到经常玩
  • 写论文时优雅的在word中添加程序代码

    一 工具 打开这个网页PlanetB 如下图 xff1a 二 步骤 1 将你需要插入在word中的代码完整的复制到该网站提示的文本框内 xff0c 选择你的代码类型 xff0c 如C C 43 43 HTML等 xff0c 并点击提交 如下
  • stm32中库函数和hal库的区别

    今天在b站看一个关于嵌入式的视频 xff0c 讲述使用stm32cube软件的 了解这些的小伙伴们应该知道STM32CubeMX 是意法半导体推出的图形化配置工具 xff0c 通过傻瓜化的操作便能实现相关配置 xff0c 最终能够生成C语言
  • python+selenium自动化能打开火狐浏览器但是打不开网址

    python 43 selenium 执行自动化脚本时能打开火狐浏览器而打不开网址时 提示 xff1a Unsupported Marionette protocol version 2 required 3 是由版本不兼容导致的 我安装的
  • 使用docker运行gitlab服务

    之前 xff0c 在服务器上直接安装配置过gitlab xff0c 感觉需要配置安装的东西还是挺多的 xff1a git xff0c redis xff0c postgresql xff0c nginx等 这么多服务一起 xff0c 备份和

随机推荐