Windows10 + Visual Studio 2017 + CMake +OpenCV编译、开发环境配置及测试
由于最近需要使用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编译、开发环境配置及测试的更多相关文章
- visual studio 2017搭建linux c++开发环境
https://blog.csdn.net/cekonghyj/article/details/77917433 https://blog.csdn.net/norsd/article/details ...
- Visual Studio 2017 ASP.NET Core开发
Visual Studio 2017 ASP.NET Core开发,Visual Studio 2017 已经内置ASP.NET Core 开发工具. 在选择.NET Core 功能安装以后就可以进行 ...
- Cocos发展Visual Studio下一个libcurl图书馆开发环境的搭建
我们解释win32在Visual Studio下一个libcurl图书馆开发环境的搭建.Cocos2d-x发动机实际上与Win32在访问libcurl库.Cocos2d-x 3.x在libcurl库文 ...
- Visual Studio Code搭建NodeJs的开发环境
一.Visual Studio Code搭建NodeJs的开发环境 1.下载安装NodeJs并配置环境变量 可以参考:NodeJs的安装和环境变量配置 2.下载安装 VS Code编辑器 可以参考:V ...
- 使用Visual Studio 2017作为Linux C++开发工具
Visual Studio 2017 微软的宇宙第一IDE Visual Studio 2017正式版出来了,地址是:https://www.visualstudio.com/vs/whatsnew/ ...
- OpenCV+VS开发环境配置
最近跑C程序,头文件中用到了OpenCV中的文件,找了很多篇OpenCV+VS的环境配置,发现如下这篇写的最为详细,特转载来自己的博客中留存,并附上原博客地址如下 OpenCV学习笔记(一)——Ope ...
- visual studio 2017 中默认无法开发 Android 8.0 及以上系统的解决方案
一般默认比较旧有两个原因,系统版本过旧,Visual Studio 版本过旧. 第一步,将windows 更新到最新版,必须是windows 10 并且更新到最新. 第二步,将visual studi ...
- Visual Studio Code 构建C/C++开发环境
转自: https://blog.csdn.net/lidong_12664196/article/details/68928136#visual-sutdio-code%E4%BB%A5%E5%8F ...
- 使用visual studio 2013 快速搭建phonegap开发环境
前一段时间开发了一款简单的Phonegap应用,遇到了很多坑,其中有一个坑就是在搭建开发环境上.由于Phonegap 2.x 与3.x 区别比较大,导致了开发环境也有所不同.2.x 是这样的http: ...
随机推荐
- HDU 1024 Max Sum Plus Plus (动态规划)
HDU 1024 Max Sum Plus Plus (动态规划) Description Now I think you have got an AC in Ignatius.L's "M ...
- 洛谷P4843 清理雪道
题意:给你DAG,求最小路径边覆盖.路径可重. 解:首先可以想到边转点,发现有n²条边,果断超时. 有源汇有上下界最小流. 建图:每条边都建立一条边,流量限制为[1, 1]. 源点向每个点连边,因为都 ...
- 洛谷P3768 简单的数学题
解: 神奇的一批......参观yyb巨神的博客. 大致思路就是第一步枚举gcd,发现后面有个限制是gcd=1,用反演,得到的F(x)是两个等差数列求积. 然后发现有个地方我们除法的除数是乘积,于是换 ...
- A1019. General Palindromic Number
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...
- HTTP/1.1 100 Continue - I 服了 You
今天用 c 的 socket() 模拟发送http请求:上传一张图片到服务器. 在本地测试,本地电脑: xp, iis5.1 经过半天时间对 http post file 协议的了解,代码已经写好,测 ...
- 求解100以内的所有素数(问题来自PythonTip)
求解100以内的所有素数 (AC/Submit)Ratio(4615|22542)20.47% 描述: 输出100以内的所有素数,素数之间以一个空格区分(注意,最后一个数字之后不能有空格). a=[2 ...
- 因缺失log4j.properties 配置文件导致flume无法正常启动。
因缺失log4j.properties 配置文件导致flume无法正常启动 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.报错:log4j:WARN No appenders ...
- Hadoop生态圈-CDH与HUE使用案例
Hadoop生态圈-CDH与HUE使用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HUE的介绍 1>.HUE的由来 HUE全称是HadoopUser Experi ...
- 4、JDBC-API
访问数据库 /** * 在 java.sql 包中有 3 个接口分别定义了对数据库的调用的不同方式: * * Statement * * PrepatedStatement * * CallableS ...
- GYM 101173 F.Free Figurines(贪心||并查集)
原题链接 题意:俄罗斯套娃,给出一个初始状态和终止状态,问至少需要多少步操作才能实现状态转化 贪心做法如果完全拆掉再重装,答案是p[i]和q[i]中不为0的值的个数.现在要求寻找最小步数,显然要减去一 ...