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

引言

去年十一月,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。
在这里插入图片描述
2.运行CMake,指定安装和存放路径。(本人使用的CMake 3.14.1)
在这里插入图片描述
点击左下方的configure,开始第一次编译。编译时会出现版本选择框,我们这里使用的VS2015 x64,选择Visual Studio 14 2015,x64平台。VS2017的应选择Visual Studio 15 2017,其它的按提示选择相应版本即可。
在这里插入图片描述
点击Finish后就会开始配置了。第一次配置之后,如果中间方框还存在红色,那就进行第二次配置,一直到方框内变白,Configuring done。然后,在OPENCV_EXTRA_MODULES_PATH下添加我们需要的contrib库。这里选中opencv_contrib下modules文件夹。
在这里插入图片描述
添加好库后,点击Generate,等待片刻。出现Generating done,方框内未出现红色,说明生成完毕。
在这里插入图片描述

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的勾去掉。如下图所示。
    在这里插入图片描述
  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。保证后续代码的良好运行。后来我也是重新编译生成了该模块才解决问题。
    在这里插入图片描述

VS编译生成install

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

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

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

添加环境变量

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

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

在这里插入图片描述
在这里插入图片描述
大功告成!马上测试一下吧。以读取图像为例。

#include <opencv2\opencv.hpp>
#include <iostream>
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版本。编译的是什么版本就用什么版本):
在这里插入图片描述

推荐资料

  1. OpenCV3编程入门_毛星云编著_电子工业出版
    我的同院学长和班主任一起写的。内容详实,目前我还在学习参考中。
  2. OReilly.Learning.OpenCV.3
    OReilly的经典书目,不必多说,英文好的可以直接啃。《学习OpenCV2》有中文版的,但是里面的语言用法太老了,不建议过多依赖。
  3. 图像处理、分析与机器视觉_Milan Sonka等著
    我在图书馆借到了中文版,内容非常全面,适用于理论学习。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要基于 Android 的 OpenCV 4.0.1 和 OpenCV Contrib 4.0.1 进行编译,可以按照以下步骤进行: 1. 下载 OpenCV 4.0.1 和 OpenCV Contrib 4.0.1 的源代码: ``` git clone https://github.com/opencv/opencv.git cd opencv git checkout 4.0.1 cd .. git clone https://github.com/opencv/opencv_contrib.git cd opencv_contrib git checkout 4.0.1 ``` 2. 安装 Android NDK 和 Android SDK,并设置相应的环境变量。 3. 在 opencv 目录下创建一个 build 目录,并进入该目录: ``` mkdir build cd build ``` 4. 运行以下命令,生成 OpenCV Android 库: ``` cmake -DANDROID_ABI=armeabi-v7a \ -DANDROID_PLATFORM=android-21 \ -DANDROID_TOOLCHAIN=clang \ -DANDROID_STL=c++_static \ -DWITH_OPENCL=OFF \ -DWITH_IPP=OFF \ -DWITH_TBB=OFF \ -DWITH_MATLAB=OFF \ -DWITH_CUDA=OFF \ -DWITH_GTK=OFF \ -DBUILD_opencv_apps=OFF \ -DBUILD_ANDROID_EXAMPLES=OFF \ -DBUILD_ANDROID_PROJECTS=OFF \ -DBUILD_DOCS=OFF \ -DBUILD_EXAMPLES=OFF \ -DBUILD_PACKAGE=OFF \ -DBUILD_PERF_TESTS=OFF \ -DBUILD_TESTS=OFF \ -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_TOOLCHAIN_FILE=../../android.toolchain.cmake \ ../ ``` 其中,`ANDROID_ABI` 表示 Android 平台架构,这里设置为 `armeabi-v7a`,表示 ARMv7 架构;`ANDROID_PLATFORM` 表示 Android 平台版本,这里设置为 `android-21`;`ANDROID_TOOLCHAIN` 表示使用的工具链,这里设置为 `clang`;`ANDROID_STL` 表示使用的 C++ 标准库,这里设置为 `c++_static`,表示静态链接;`WITH_OPENCL`、`WITH_IPP`、`WITH_TBB`、`WITH_MATLAB`、`WITH_CUDA`、`WITH_GTK` 分别表示是否启用 OpenCL、IPP、TBB、MATLAB、CUDA、GTK 等功能,这里都设置为 `OFF`;`BUILD_opencv_apps`、`BUILD_ANDROID_EXAMPLES`、`BUILD_ANDROID_PROJECTS`、`BUILD_DOCS`、`BUILD_EXAMPLES`、`BUILD_PACKAGE`、`BUILD_PERF_TESTS`、`BUILD_TESTS` 分别表示是否编译 OpenCV 应用程序、Android 示例、Android 项目、文档、示例、打包、性能测试、测试,这里都设置为 `OFF`;`OPENCV_EXTRA_MODULES_PATH` 表示 OpenCV Contrib 目录的路径;`CMAKE_BUILD_TYPE` 表示编译类型,这里设置为 `Release`;`CMAKE_TOOLCHAIN_FILE` 表示使用的交叉编译工具链文件。 5. 运行以下命令,编译生成 OpenCV Android 库: ``` make -j4 ``` 其中,`-j4` 表示使用 4 个核心进行编译。 6. 在 build 目录下会生成一个 `sdk` 目录,其中包含编译好的 OpenCV Android 库。 可以将该库导入到 Android Studio 中,然后在项目中使用该库提供的函数进行开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值