win10+opencv3.4.9+opencv_contrib3.4.9+vs2015下x86/x64环境搭建

目录

一、安装vs2015

二、安装64位opencv

2.1、下载

2.2、安装

2.3、环境配置

三、opencv视觉库测试

3.1、配置工程

3.2、测试功能

四、32位opencv编译安装

4.1、安装cmake工具

4.2、生成opencv的vs2015工程

五、编译安装opencv_contrib

5.1、下载

5.2、生成opencv+opencv_contrib工程

六、测试x86库

6.1、拷贝x86库和bin文件

6.2、opencv测试工程使用x86配置

七、关于BUILD_opencv_world选项


一、安装vs2015

安装简单,一路next,不做记录。

二、安装64位opencv

2.1、下载

前往opencv官网下载地址下载OpenCV的Win pack版,我下载的是opencv-3.4.9-vc14_vc15.exe。

2.2、安装

       下载的opencv为自解压版本,运行exe文件,指定自解压目录即可。我的解压目录是D:/opencv解压后将名称改为opencv349,因为可能实际项目中遇到各种版本,为以后不同版本区分,这样我的opencv的build目录即为:D:\opencv\opencv349\build。注意所有的安装环境都不要出现中文路径,虽然不少软件中文环境支持越来越好,但为了省去不必要的麻烦,还是老老实实的使用英文路径。

2.3、环境配置

       将opencv的vs2015相关路径添加到path环境变量中。我的路径为:“D:\opencv\opencv349\build\x64\vc14\bin”;环境配置完成重启。cmd下执行opencv_version如果能输出opencv版本则环境变量生效。

三、opencv视觉库测试

3.1、配置工程

    1. vs2015新建一个win32控制台工程。因为我的opencv安装目录build下只有x64,所以工程选项设置x64;
    2. 在配置属性》C/C++》附加包含目录中添加D:\opencv\opencv349\build\include配置工程依赖的opencv头文件;
    3. 在配置属性》链接器》附加库目录中 添加D:\opencv\opencv349\build\x64\vc14\lib;配置工程依赖的opencv库文件;
    4. 此时如果编译opencv工程会报“无法解析的外部符号”的错误,还需指定外部依赖库。在配置属性》链接器》附加依赖项 中添加opencv_world349d.lib英文分号与其他依赖项区分开,如果目标为release版本则添加的是opencv_world349.lib,debug则是带d后缀的。

3.2、测试功能

       在新工程的main函数实现如下代码:

#include "stdafx.h"  
#include <iostream>  
#include "opencv2/opencv.hpp"  
  
int main()  
{  
    cv::Mat img = cv::imread("test.jpg");//载入一张图片  
    cv::imshow("测试图片", img);//显示图片 窗口名为“测试图片”  
    cv::waitKey(0);//等待任意键(暂停)  
    return 0;  
}

其中test.jpg为一张测试jpg图片,路径自定义。编译运行则出现显示图片的窗口。自此opencv+vs2015环境搭建完成,可以进行opencv开发。

以上只是简单的测试,由opencv官方提供的x64库来验证,基本按部就班即可,下面尝试下编译安装x86库。

四、32位opencv编译安装

4.1、安装cmake工具

       前往cmake下载网址下载cmake,因为我的环境是win10x64位所以我下载的是cmake-3.18.0-rc1-win64-x64.zip,。解压后即可。

4.2、生成opencv的vs2015工程

运行解压目录下的bin/cmake-gui.exe;出现如下画面:

其中source code选择opencv源码目录,build the binaries选择生成目录,我是在opencv的build下新建了一个x86目录(此处建议另选文件夹,在随后生成工程中会生成大量中间文件)。完成后点击configure。

选择vs2015,其他默认,点击finish,等待完成,中途不要断网。

       1、Configure ,  等待完成;然后会出现红色错误,此时查看CMakeDownloadLog.txt文件发现因为要下载opencv_ffmpeg.dll,opencv_ffmpeg_64.dll,ffmpeg_version.cmake和ippicv_2019_win_ia32_20180723_general.zip文件失败。而log文件中有它们的下载地址,在浏览器中打开https://raw.githubusercontent.com下载地址发现无法打开,此时需要修改hosts,修改C:\Windows\System32\drivers\etc\hosts添加如下内容:(参考博客建议不要先修改hosts,因为即使修改了hosts用cmake下载也会非常的慢,也大概率下载失败,先下载出错生成0字节大小的中间文件,再用已下载的文件替换中间文件比较合适。(这一步不做不影响opencv库编译影响下面opencv_contrib编译,如果只编译opencv库只需再次点击Configure即可)

# GitHub Start  
52.74.223.119 github.com  
192.30.253.119 gist.github.com  
54.169.195.247 api.github.com  
185.199.111.153 assets-cdn.github.com  
151.101.76.133 raw.githubusercontent.com  
151.101.108.133 user-images.githubusercontent.com  
151.101.76.133 gist.githubusercontent.com  
151.101.76.133 cloud.githubusercontent.com  
151.101.76.133 camo.githubusercontent.com  
151.101.76.133 avatars0.githubusercontent.com  
151.101.76.133 avatars1.githubusercontent.com  
151.101.76.133 avatars2.githubusercontent.com  
151.101.76.133 avatars3.githubusercontent.com  
151.101.76.133 avatars4.githubusercontent.com  
151.101.76.133 avatars5.githubusercontent.com  
151.101.76.133 avatars6.githubusercontent.com  
151.101.76.133 avatars7.githubusercontent.com  
151.101.76.133 avatars8.githubusercontent.com  
# GitHub End 

此时建议不要通过CMake来下载文件,因为会非常的慢而且极有可能下载失败,通过第三方工具将这四个文件下载下来,替换掉sources/.cache相关的文件,文件名还保留.cache下的原来文件名,因为Configure时根据文件名的字符校验hash再拷贝。

2、再次点击Configure,此时无报错,出现Configuring done;

3、勾选BUILD_opencv_world,用于生成opencv_world349.dll;

4、点击Configure,等待Configure done;

5、点击Generate按钮生成VS工程,出现Generating done 成功;

6、点击open project按钮直接打开工程;

7、在vs2015菜单中 生成》批生成 中勾选ALL_BUILD的Debug和Release以及INSTALL的Debug和Release,然后点击生成(约需30分钟); 成功通过,此时在build/x86/install下有相应的库和头文件。

至此opencv的x86编译安装完成,先不要关闭cmake-gui,下面还要编译opencv_contrib;第3,4步骤建议加上,不然后面生成的是单个库,写程序的时候一个个查找链接库很麻烦,如果加上后生成一个opencv_workd349库,链接这一个库就行,因为是了解入门opencv先不加上。

五、编译安装opencv_contrib

前边编译的是opencv的基础模块,opencv将算法模块单独分离出来放到opencv_contrib中,所以我们还需安装opencv_contrib库,大致步骤和第四步相同,但是我尝试在第四步一起编译opencv_contrib时出错,所以先编译安装opencv再编译安装opencv_contrib。

5.1、下载

前往opencv_contrib下载地址下载和opencv一样的版本,版本不一致别的博客说会有各种异常问题。下载opencv_contrib-3.4.9.zip完成后解压,修改名字为opencv_contrib349。

5.2、生成opencv+opencv_contrib工程

  1. 此处在4.2步骤基础上
  2. search 对话框中输入OPENCV_EXTRA_MODULES_PATH,
    找到OPENCV_EXTRA_MODULES_PATH后在value中填入编译opencv_contrib解压目录中的modules路径,我的路径是:D:\opencv\opencv_contrib349\modules,如下:

  3. 搜索栏中输入 OPENCV_ENABLE_NONFREE ,在value值中点击选中。如果没有选中,那么类似SIFT这种已经被申请专利的方法就无法使用如下:
  4. 点击configure等待出现Configuring done(此时还会有红色异常,不用管再次Configure直到红色消失);
  5. 点击Generate按钮生成VS工程;
  6. 关闭之前的vs2015工程,点击Open project使用vs2015打开opencv工程;
  7. Vs2015中生成》批生成勾选ALL_BUIL的Debug/Release和INSTALL的Debug/Relase如下:
  8. 然后点击生成,等待30分钟左右成功通过,在
    D:\opencv\opencv349\build\x86\install\下也生成了相应的include以及x86对应的bin和lib文件。

六、测试x86库

6.1、拷贝x86库和bin文件

最终在install/x86下生成了x86的bin文件和lib库,将此文件放到合适位置,我仿照x64库位置将install下的x86文件夹放在了build/下。

如果是生成的opencv_world349库需要修改环境变量,将之前path的x64环境变量修改为x86的,如果没有这一步后面vs工程编译通过但是运行时会报错“应用程序无法正常启动c000007b”。

如果生成的是单个库不用修改环境变量,需要将相应的dll拷贝到可执行程序同一目录下,运行exe看缺啥拷啥。

6.2、opencv测试工程使用x86配置

之前的opencv测试工程修改目标平台为x86平台,链接库目录修改为新生成的x86库路径;因为这一次编译没有指定BUILD_opencv_world,所以要指定链接的opencv库;可以在属性》链接器》输入》附加依赖项 中将之前的opencv_world349d.lib换成需要的库,也可以在程序里声明。

程序中声明main函数如下:

#include "stdafx.h"  
#include <iostream>  
#include "opencv2/opencv.hpp"  
using namespace cv;  
#ifdef _DEBUG  
#pragma comment(lib,"opencv_core349d.lib")  
#pragma comment(lib,"opencv_highgui349d.lib")  
#pragma comment(lib,"opencv_imgcodecs349d.lib")  
#else  
#pragma comment(lib,"opencv_core349.lib")  
#pragma comment(lib,"opencv_highgui349.lib")  
#pragma comment(lib,"opencv_imgcodecs349.lib")  
#endif  
int main()  
{  
    cv::Mat img = cv::imread("test.jpg");//载入一张图片  
    cv::imshow("测试图片", img);//显示图片 窗口名为“测试图片”  
    cv::waitKey(0);//等待任意键(暂停)  
    return 0;  
}

 

重新生成解决方案,编译运行通过。

七、关于BUILD_opencv_world选项

加上BUILD_opencv_world会生成opencv_world349.lib,在调试程序是只需要链接这一个库即可,便于调试程序,但是需要申明环境变量,不便于程序发布。

不加BUILD_opencv_world编译时会分别生成各个lib和dll,需要自己找到程序的依赖库做申明,不便于调试程序,但是在发布程序时只需将用到的dll放到可执行程序同目录即可,不需要申明环境变量,比较友好,各取所需,我是初学者打算不加上BUILD_opencv_world,这样更好理解每个功能对应的模块。

关于如何查找函数对应的是哪个库,在lib目录下使用findstr 搜索,比如需要找到imread在哪个库里实现,cmd下进入到库目录使用如下命令:findstr /I "imread" *.lib输出结果带有opencv_imgcodecs349字样,就找到了实现库。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值