由于最近需要使用OpenCV,本人需要在自己的PC上使用OpenCV,因此最近一直在研究如何使用Visual Studio编译OpenCV源代码并搭建开发环境,折腾了很长时间,查阅了很多相关资料,终于成功。本文记录一下安装的过程以及遇到的问题,仅供参考。开篇吐槽一下博客园的博文【自动保存和恢复】功能,说白了就是可以自动保存,但是几乎不能自动恢复,不要问我为什么这么说,呵呵。

本PC环境的详细配置:Windows 10 16299.192 64-bit,Visual Studio Enterprise 2017 15.5.2,OpenCV-3.4.0-vc14_vc15,CMake 3.10.1,CUDA 9.0

开始正式介绍安装步骤:

(1)下载并安装Visual Studio 2017。由于本PC上安装的是最新的Visual Studio 2017企业版,因此本人主要研究如何在最新版的VS上编译并部署opencv开发环境。如果各位搞不到Visual Studio 2017企业版的激活码,那么使用社区版也是没有问题的。首先到官方网站下载Visual Studio 2017并安装。在Visual Studio Installer中,勾选和C++开发相关的所有组建,并且确保安装过程顺利无误,这一点非常重要,因为必须确保VC++编译环境正确安装。这里提醒一下,注意VS2017的版本号为15,因此对应的VC++编译环境的版本号为vc15,这个很重要,将决定opencv版本的安装。

(2)下载并安装OpenCV。从官网下载OpenCV,本人使用的是最新版OpenCV-3.4.0-vc14_vc15,请注意,这里要下载支持vc15的版本,才能很好的兼容Visual Studio 2017,本人曾看一些博客写到用vc14(对应Visual Studio 2015)的版本在Visual Studio 2017中使用,亲测,毛病有不少。安装过程没什么太多好说,比较简单。为了求稳,安装目录设为C:/OpenCV,目录中全英文且不包含任何空格符。PS:这个版本是在12月23日发布的,圣诞礼物哟。

(3)下载并安装CMake。从CMake官网上下载最新版的CMake。因为本人使用的环境是比较新的,因此需要使用新的CMake来保证兼容性。

(4)使用CMake创建OpenCV.sln。为了实现OpenCV的本地编译,首先要使用CMake创建OpenCV.sln,然后再使用VS2017进行编译,生成库文件。首先启动CMake,选择OpenCV的源代码目录和build目录,然后点击【Configure】,CMake开始执行配置,开始前,要选择正确的编译器,本PC上安装的是Visual Studio 2017 15.5.2,因此选择Visual Studio 15 2017 Win64.此时点击【Finish】,配置过程开始。只要OpenCV和CMake下载安装不出问题,一般来说这个过程是不会报错的,如果出错导致配置失败,则需要查阅日志文件,解决问题。这里说明一点,在Configure过程中,需要联网自动下载三个文件,可能会由于网络的问题导致下载不下来,如果由于该问题导致配置失败,可以通过重新配置的方法解决该问题,实在不行,可以去网上找这三个文件,手动下载。

 

在配置过程结束后,如果成功,则会在日志框里显示【Configuring done】,中间的配置框会变红,显示配置项。在这里,要手动勾选两项【BUILD_EXAMPLES】和【BUILD_opencv_world】,然后再点击【Configure】,再次执行配置。不出意外的话,这个过程会很快完成,配置框变为白色。该步骤完成。本人在这里遇到了一个巨大的坑:本人的PC上安装了CUDA 9.0,不知道是没安装好还是兼容性问题,在成功生成OpenCV工程文件后,使用VS2017编译源代码,总是失败,折腾了两天时间。经过查阅编译日志(这里忘了截图),发现是CUDA编译器的问题,经过摸索,发现将BUILD_CUDA相关的项目勾选去掉,然后重新生成sln,解决了问题。后来我重装了系统,没有安装CUDA,则正常安装即可,可忽略这个步骤。

(5)生成OpenCV.sln。配置完成后,点击【Generate】,生成VS工程文件。这个过程一般不需要太多时间,只要之前的过程没出错,这里一般不会有问题。

(6)使用VS2017编译OpenCV源代码。点击【Open Project】按钮,CMake会启动VS2017并加载OpenCV.sln。加载过程可能要一点时间(相对于一般小规模项目而言),需要耐心等待。加载完成后,点击【生成】,选择【批生成】,然后只勾选INSTALL那两项,其他项目不勾选,然后开始生成。这个过程比较久,需要耐心等待,本PC上跑了50分钟。

 

Build成功后,在C:\OpenCV\build\install\x64\vc15\bin目录下会生成相应的动态库。如果有失败的,要查阅输出日志,具体问题具体解决。到此,本地编译OpenCV的工作就全部做完了。

(7)配置OpenCV环境变量。右击【此电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> 系统变量 -> 编辑Path -> 新建】,添加环境变量C:\OpenCV\build\install\x64\vc15\bin。这个步骤不难,网上有很多教程。

(8)新建工程并测试。在VS2017中新建一个空的C++项目。在【属性管理器】中选中【Debug | x64->Microsoft.Cpp.x64.user】并右击弹出菜单,选择【属性】。

  

选择【C/C++ -> 常规 -> 附加包含目录】,添加如下三个目录:

再选择【链接器 -> 附加库目录】,添加如下目录:

再选择【链接器 -> 输入 -> 附加依赖项】,添加如下库文件名:

点击【确定】,【应用】。

创建一个cpp文件,并添加如下测试代码:

 #include <opencv2\opencv.hpp>

 using namespace cv;

 int main(int argc, char** argv)
{
Mat img = imread("C:\\Users\\lzhuc\\source\\repos\\opencv_test\\x64\\Debug\\lena.jpg");
imshow("img", img);
waitKey();
return ;
}

编译,运行,效果如下:

本人测试发现,如果配好了环境直接运行,会报错,发现img为空,是个0x0的矩阵,重启一下系统,就可以了。

参考资料:

http://blog.csdn.net/rrrfff/article/details/76796261

http://blog.csdn.net/u013832707/article/details/53127710

http://blog.csdn.net/poem_qianmo/article/details/21974023

http://blog.csdn.net/paulhappy/article/details/52107121

2019年12月1日,在一个更新的环境中编译安装OpenCV:

Windows 10 18363.476 64-bit,Visual Studio Enterprise 2017 15.9.17,OpenCV-4.1.2,CMake 3.16.1

步骤和上文中完全一致。有个小坑,在用CMake生成sln的过程中的configuatio步骤,遇到【无法打开文件“MSVCRTD.lib”】的问题。解决方案是,在Visual Studio Installer中,安装C++ for spectre组件,如下图:

装完,重新启动CMake,再从头开始,一切OK。

按照上述步骤,在VS中测试时,发现编译通不过,报错【无法打开文件opencv_world412d.lib】,慌了一波,检查了一下,发现时在链接器配置中的【附加依赖项】写错了,写成了opencv_world412d.dll,改成.lib即可。

在VS 2017中编译过程中,生成x86项目没有问题,但是生成x64项目的时候,失败了一个,如下:

------ 已启动生成: 项目: opencv_python3, 配置: Release x64 ------
Building Custom Rule C:/OpenCV/opencv-4.1.2/modules/python/python3/CMakeLists.txt
cv2.cpp
  正在创建库 C:/OpenCV/opencv-4.1.2/build/lib/Release/opencv_python3.lib 和对象 C:/OpenCV/opencv-4.1.2/build/lib/Release/opencv_python3.exp
opencv_python3.vcxproj -> C:\OpenCV\opencv-4.1.2\build\lib\python3\Release\cv2.cp36-win_amd64.pyd
------ 已启动生成: 项目: opencv_python3, 配置: Debug x64 ------
Building Custom Rule C:/OpenCV/opencv-4.1.2/modules/python/python3/CMakeLists.txt
cv2.cpp
LINK : fatal error LNK1104: 无法打开文件“python36_d.lib”
已完成生成项目“opencv_python3.vcxproj”的操作 - 失败。

发现是安装python3.6的时候没有带入debug库,解决方案如下:

在【解决方案资源管理器】中,找到【binding】目录,找到【opencv_python3】项目,在【外部依赖项】中找到【pyconfig.h】文件,修改其中两个地方

1、将【# define Py_DEBUG】注释掉,如下

2、将【pragma comment(lib,"python36_d.lib")】改为【pragma comment(lib,"python36.lib")】,如下

修改完成后,在解决方案上右键点击【生成解决方案】,即可重新将生成失败的方案重新生成,如下

一切OK!

参考

https://blog.csdn.net/Huntercao/article/details/84555201

Windows10 + Visual Studio 2017 + CMake +OpenCV编译、开发环境配置及测试的更多相关文章

  1. visual studio 2017搭建linux c++开发环境

    https://blog.csdn.net/cekonghyj/article/details/77917433 https://blog.csdn.net/norsd/article/details ...

  2. Visual Studio 2017 ASP.NET Core开发

    Visual Studio 2017 ASP.NET Core开发,Visual Studio 2017 已经内置ASP.NET Core 开发工具. 在选择.NET Core 功能安装以后就可以进行 ...

  3. Cocos发展Visual Studio下一个libcurl图书馆开发环境的搭建

    我们解释win32在Visual Studio下一个libcurl图书馆开发环境的搭建.Cocos2d-x发动机实际上与Win32在访问libcurl库.Cocos2d-x 3.x在libcurl库文 ...

  4. Visual Studio Code搭建NodeJs的开发环境

    一.Visual Studio Code搭建NodeJs的开发环境 1.下载安装NodeJs并配置环境变量 可以参考:NodeJs的安装和环境变量配置 2.下载安装 VS Code编辑器 可以参考:V ...

  5. 使用Visual Studio 2017作为Linux C++开发工具

    Visual Studio 2017 微软的宇宙第一IDE Visual Studio 2017正式版出来了,地址是:https://www.visualstudio.com/vs/whatsnew/ ...

  6. OpenCV+VS开发环境配置

    最近跑C程序,头文件中用到了OpenCV中的文件,找了很多篇OpenCV+VS的环境配置,发现如下这篇写的最为详细,特转载来自己的博客中留存,并附上原博客地址如下 OpenCV学习笔记(一)——Ope ...

  7. visual studio 2017 中默认无法开发 Android 8.0 及以上系统的解决方案

    一般默认比较旧有两个原因,系统版本过旧,Visual Studio 版本过旧. 第一步,将windows 更新到最新版,必须是windows 10 并且更新到最新. 第二步,将visual studi ...

  8. Visual Studio Code 构建C/C++开发环境

    转自: https://blog.csdn.net/lidong_12664196/article/details/68928136#visual-sutdio-code%E4%BB%A5%E5%8F ...

  9. 使用visual studio 2013 快速搭建phonegap开发环境

    前一段时间开发了一款简单的Phonegap应用,遇到了很多坑,其中有一个坑就是在搭建开发环境上.由于Phonegap 2.x 与3.x 区别比较大,导致了开发环境也有所不同.2.x 是这样的http: ...

随机推荐

  1. luogu1072 [NOIp2009]Hankson的趣味题 (数学+STL::set)

    一个JSB做法 由$\frac{x*b0}{gcd(x,b0)}=b1$,可得$\frac{x}{gcd(x,b0)}=\frac{b1}{b0}$ 设$b2=\frac{b1}{b0}$ 所以对$b ...

  2. selenium_基本用法

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  3. url 编码和解码网址

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  4. passat / maintenance / baoyang

    s s 南京迎客隆汽车租赁有限公司 / 地址:常府街54号 / 电话:025-84546836 84507610 二手车养不起.修不起?果真如此吗?http://www.che168.com/list ...

  5. 使用swagger来编写在线api文档

    swagger是一个非常简单,强大的框架.快速上手,只需要引入jar包 , 使用注解就可以生成一个漂亮的在线api文档 pom.xml <dependency> <groupId&g ...

  6. table中表头不动,表体产生滚动条

    <div id="elec_table"> 2 <div class="table-head"> 3 <table> 4 & ...

  7. JAVA记录-WebService开发部署

    JWS.Axis2.cxf 1.下载axis2.war和axis2.bin.zip 2.将axis2.war包部署到Tomcat下,启动Tomcat测试:http://localhost:8089/a ...

  8. PHP 错误 系列:编码格式错误解决

    一.Phalcon模型代码日志错误代码 错误页面显示: Log日志错误代码: PHP message: PHP Fatal error: Namespace declaration statement ...

  9. 04-接口隔离原则(ISP)

    1. 背景 类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类B和类D来说不是最小接口,则类B和类D不得不去实现它们不需要的方法. 2. 定义 一个类对另一个类的依赖应该建立在最小的接口 ...

  10. Hibernate_day01

    一.今天内容介绍 1 web内容回顾 (1)javaee三层结构 (2)mvc思想 2 hibernate概述 3 hibernate入门案例 4 hibernate配置文件 5 hibernate的 ...