OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建

OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建

  • 引言
    • 使用CMake/OpenCV_contrib编译的意义何在?
  • OpenCV的下载、安装和配置
    • 预准备:下载和安装开发环境
    • CMake配置与生成
    • CMake配置和生成中可能遇到的问题及解决方案
    • VS编译生成install
    • 工程包含(include)目录的配置
    • 添加环境变量
  • 推荐资料

引言

去年十一月,OpenCV4.0.0重磅发布。Release Note中介绍了OpenCV4.0 内含一些特别有用的新特性与新模块,感兴趣的可以直接通过官方文档查看。
很多像我一样的新手在配置OpenCV这一步就碰到了许多问题,因此这次我想以VS2015+OpenCV4.0.1+CMake 3.14.1为例简述一下OpenCV的环境搭建步骤,并通过自己的亲身经历提出一些问题的解决方案。

使用CMake/OpenCV_contrib编译的意义何在?

有的朋友可能会问了,为什么要使用Cmake+VS来编译OpenCV的源代码,而不是直接添加配置?contrib又是做什么的呢?
折腾这些操作其实是为了两点:

  1. 方便欣赏和调试opencv的源代码
  2. OpenCV有些扩展包放在了contrib中,如DNN识别、光流跟踪模块、AR增强现实模块等。为了使用这些包,我们需要自行把opencv和contrib一起编译。

OpenCV的下载、安装和配置

预准备:下载和安装开发环境

本人使用的是VS2015+OpenCV4.0.1+CMake 3.14.1。
OpenCV 4.0.1下载:https://github.com/opencv/opencv/releases/tag/4.0.1
OpenCV_contrib 4.0.1下载:https://github.com/opencv/opencv_contrib/releases/tag/4.0.1
CMake-gui 下载:https://cmake.org/download/

由于国内服务器访问GitHub不太稳定,下载contrib文件时速度很慢。特此推荐该博主上传到百度云的所有版本。

注意:OpenCV的版本和OpenCV_contrib的版本必须一致,不然CMake编译必定报错。

CMake配置与生成

1.设置解决方案的存放路径。将OpenCV、contrib文件分别安装和解压到指定位置(路径不要有中文,CMake不识别)。在OpenCV目录下创建一个新文件夹newbuild。
OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第1张图片
2.运行CMake,指定安装和存放路径。(本人使用的CMake 3.14.1)
OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第2张图片
点击左下方的configure,开始第一次编译。编译时会出现版本选择框,我们这里使用的VS2015 x64,选择Visual Studio 14 2015,x64平台。VS2017的应选择Visual Studio 15 2017,其它的按提示选择相应版本即可。
OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第3张图片
点击Finish后就会开始配置了。第一次配置之后,如果中间方框还存在红色,那就进行第二次配置,一直到方框内变白,Configuring done。然后,在OPENCV_EXTRA_MODULES_PATH下添加我们需要的contrib库。这里选中opencv_contrib下modules文件夹。
OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第4张图片
添加好库后,点击Generate,等待片刻。出现Generating done,方框内未出现红色,说明生成完毕。
OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第5张图片

CMake配置和生成中可能遇到的问题及解决方案

  1. CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
    Please set them or make sure they are set and tested correctly in the CMake files:
    CUDA_nppi_LIBRARY (ADVANCED)

    因为OpenCV 4.0.1不支持cuda9.0的架构,需要改一些配置文件。参考这篇博文,重新编译即可解决该问题。
    还有一个简单粗暴的方法,不使用CUDA加速,直接把with CUDA的勾去掉。如下图所示。
    OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第6张图片
  2. This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'create’.
    该条不会影响编译生成的进程,只是对调用某些模块会产生影响。
    这条警告是在所有工作完成后,在VS中对OpenCV测试时出现的问题。当时我想调用xfeature2D的SIFT模块,运行时出现该错误。产生错误的原因是许多算法如特征提取中的SIFT, SURF, Harris等受到专利保护。而CMake编译之前不会默认勾上OPENCV_ENABLE_NONFREE,这时我们需要手动勾上OPENCV_ENABLE_NONFREE。保证后续代码的良好运行。后来我也是重新编译生成了该模块才解决问题。
    OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第7张图片

VS编译生成install

Generating done以后,我们可以打开解决方案存放路径的文件夹(这里为newbuild)。其中有个名为OpenCV.sln的解决方案文件,我们用VS2015打开它。
OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第8张图片
打开它以后,在右侧的解决方案资源管理器界面,找到CMakeTargets的INSTALL项目,右键生成。
OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第9张图片
这里生成时间较长,性能越好的电脑生成速度越快。一般在20分钟以上。

工程包含(include)目录的配置

  1. 打开或新建一个cpp源文件(具体步骤省略)
  2. 打开属性管理器(在界面的右方,解决方案资源管理的旁边。如果没有,在菜单栏单击【视图】——【属性管理器】即可)。
  3. 属性管理器根据Debug/Release以及32/64位版本划分了4类。Debug是调试版本,Release是发布版本。这里我们选择Debug| x64,右键【属性】。
    OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第10张图片
  4. 在【通用属性】——【VC++目录】——【包含目录】下添加之前newbuild目录下编译生成的两个路径:D:\opencv4.0.1\opencv\newbuild\install\include及D:\opencv4.0.1\opencv\newbuild\install\include\opencv2。注意若opencv的安装路径不同,该路径要相应改变。
    OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第11张图片
  5. 在【通用属性】——【VC++目录】——【库目录】下添加lib库目录,如下图所示。
    OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第12张图片
  6. 在【链接器】——【输入】——【附加依赖项】下添加lib文件名。lib文件存放的路径为 D:\opencv4.0.1\opencv\newbuild\install\x64\vc14\lib。
    OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第13张图片
    OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第14张图片
    可以看到,目录下的lib文件较多。如果一个个手输不仅效率低下,而且易出错。
    这里有一个快速提取lib文件名的方法:
    (1)Win+R 输入cmd打开命令提示符
    (2)进入保存lib文件的路径
    (3)输入命令dir /b *.lib>0.txt,即把所有lib文件名保存到该目录下的0.txt文件中。
    把记事本里面的文件名全部复制,粘贴到附加依赖项就OK啦!
    OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第15张图片
    OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第16张图片

添加环境变量

以Win10为例,在【我的电脑】——【属性】——【高级系统设置】——【环境变量】中添加路径

D:\opencv4.0.1\opencv\newbuild\install\x64\vc14\bin

OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第17张图片
OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第18张图片
大功告成!马上测试一下吧。以读取图像为例。

#include 
#include 
using namespace cv;
using namespace std;

int main(int argc,char **argv){
	char *filename = "D://Sources//kitty.jpg";
	Mat img = imread(filename);
	if (img.empty()) {
		cout << "cannot load image!" << endl;
		return -1;
	}
	char *winname = "Kitty image";
	namedWindow(winname, WINDOW_AUTOSIZE);
	imshow(winname, img);
	waitKey(0);
	return 0;
}

效果如下(切记一定选择x64,Debug版本。编译的是什么版本就用什么版本):
OpenCV学习笔记(一)OpenCV4.0.1 +VS2015 环境搭建_第19张图片

推荐资料

  1. OpenCV3编程入门_毛星云编著_电子工业出版
    我的同院学长和班主任一起写的。内容详实,目前我还在学习参考中。
  2. OReilly.Learning.OpenCV.3
    OReilly的经典书目,不必多说,英文好的可以直接啃。《学习OpenCV2》有中文版的,但是里面的语言用法太老了,不建议过多依赖。
  3. 图像处理、分析与机器视觉_Milan Sonka等著
    我在图书馆借到了中文版,内容非常全面,适用于理论学习。

你可能感兴趣的:(图形图像库,OpenCV,图像处理)