由于最近需要使用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:OpenCVuildinstallx64vc15in目录下会生成相应的动态库。如果有失败的,要查阅输出日志,具体问题具体解决。到此,本地编译OpenCV的工作就全部做完了。
(7)配置OpenCV环境变量。右击【此电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> 系统变量 -> 编辑Path -> 新建】,添加环境变量C:OpenCVuildinstallx64vc15in。这个步骤不难,网上有很多教程。
(8)新建工程并测试。在VS2017中新建一个空的C++项目。在【属性管理器】中选中【Debug | x64->Microsoft.Cpp.x64.user】并右击弹出菜单,选择【属性】。
选择【C/C++ -> 常规 -> 附加包含目录】,添加如下三个目录:
再选择【链接器 -> 附加库目录】,添加如下目录:
再选择【链接器 -> 输入 -> 附加依赖项】,添加如下库文件名:
点击【确定】,【应用】。
创建一个cpp文件,并添加如下测试代码:
1 #include <opencv2opencv.hpp> 2 3 using namespace cv; 4 5 int main(int argc, char** argv) 6 { 7 Mat img = imread("C:\Users\lzhuc\source\repos\opencv_test\x64\Debug\lena.jpg"); 8 imshow("img", img); 9 waitKey(0); 10 return 0; 11 }
编译,运行,效果如下:
本人测试发现,如果配好了环境直接运行,会报错,发现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:OpenCVopencv-4.1.2uildlibpython3Releasecv2.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