本文介绍操作过程。
如果不想麻烦,可以用编译好的版本,可以省去诸多麻烦。百度网盘下载,提取码:3wv2
csdn 备用下载链接:https://download.csdn.net/download/runandrun/11038165

下载 vs2017

vs2017 下载页面,含 for mac 版
下载之后,只有1.22M,是在线安装版本,如果只是做 openCV 相关开发,建议安装内容:

  1. 勾选大红框的两个复选框。
  2. 如果要自己编译 OpenCV,再额外勾选win10SDK。

下载 opencv 和 opencv_contrib

  • opencv 从官网下载即可,windows 环境,下载 Win pack 包,是一个自解压包,包括源码和编译之后的文件。
    openCV官网下载页面
  • opencv_contrib,官网没有编译版本,需要自己编译。记得下载的版本要和 openvc 完全一致。
    opencv_contrib github 下载页面

下载我准备的三个文件,保证你喜欢

由于国内网络原因,从 github 下载非常慢, 我上午10点多开始,直到中午吃了个午饭回来还没有下载完。

百度网盘下载,提取码:3wv2

下载解压后会得到三个文件:

  1. opencv+opencv_contrib-4.0.1+win10-x64+vs2017-build.zip:我编译好的版本,理论上应该可以直接用,如果想要自己折腾,同时你的下载速度跟我一样,下面两个文件会帮到你。
  2. opencv_contrib-4.0.1.zip
  3. cache.rar:用 CMake 编译的时候,会有很多文件下载不下来,可能要反复下载才行,这个文件就是编译时需要的文件,解压后替换 openCV 源码目录下的 .cache 目录,然后重新 Configure。

下载 CMake

java 和 python 环境

opencv 是支持 java 和 python 的,编译的时候会找相关的运行环境,我电脑上都配置了的。如果不配置不知道是什么情况,也许会跳过,如果只用 c++ 的话,跳过就跳过吧。

CMake 编译

打开解压目录下的 bin/cmake-gui.exe

  1. Where is the source code 选择 opencv-4.0.1 的源码目录。
  2. Where to build the binaries 设置编译后的文件存放目录。
  3. 点击 Configure,通常由于网络问题,会有很多错,建议下载我的catch文件:百度网盘下载,提取码:3wv2
    • 第一次点击需要设置 vs 版本。
  4. 完全没有错之后,设置三项:
    • 找到BUILD_opencv_world项,打上勾。
    • 找到OPENCV_EXTRA_MODULES_PATH项,设置为opencv_contrib目录下的modules文件夹。
    • 找到OPENCV_ENABLE_NONFREE项,打上勾。
  5. 设置好后再次点击configure按钮,然后点击generate按钮。

踩的坑

  • 提示:Error in configuration process, project files may be invalid
  • 是因为把 Where is the source code 设置成 opencv_contrib 的源码目录了,其实是要选 opencv 的源码目录。当时编译的是 opencv_contrib3.1.0

vs2017 编译

准备好10G以上的硬盘空间。

  1. CMake 成功编译完成之后,会在输出目录(在 Where to build the binaries 设置)生成 visual studio 工程,直接在该目录打开解决方案:OpenCV.sln(当然是用vs2017打开)。
  2. Solution Explorer窗口,解决方案右键->Build Solution。这个过程很慢,如果报错,那是因为 CMake 编译的时候有错,需要仔细查看,通过不断的Configure,把错误排除之后再重新Generate直到成功就行了。出现错误,通常是因为有文件没有下载下来导致。
  3. 然后,选择菜单 Build->Batch Build...
  4. 勾选两个 INSTALL 项目->Build。
  5. 编译完成,会生成一个 install 目录,这个目录下的文件就是我们需要的库文件。可以把这个目录 copy 到某处并重新命名为 opencv4.0.1 以备用。

配置 vs2017 环境

随便建一个项目,最好建一个空项目。一图胜千言,下面仅用截图来说明opencv项目需要配置的项,就不详细写了,如果不明白,可以在网上找一下相关文章,挺多的。

需要注意的是,vs2017配置好之后,需要重启vs2017才生效。

我编译之后的目录是:C:\study\openCV\opencvv4.0.1_build\install,我直接用的,下面的截图的目录就是这个,你需要替换成你自己的目录。

  1. 默认是x86,如果在 64 位操作系统下开发(应该都64位了吧,还有在32位操作系统下做开发的吗?),建议修改为x64,本文编译和配置都只针对x64
    默认是x86,如果在 64 位操作系统下开发(应该都64位了吧,还有在32位操作系统下做开发的吗?),建议修改为x64,本文编译和配置都只针对x64
  2. 创建一个空项目
    创建一个空项目
  3. 显示属性管理窗口
    显示属性管理窗口
  4. 修改默认配置属性,Property Manager -> 展开项目 -> Debug | x64 -> Microsoftt.Cpp.x64.user -> 右键 -> Properties
    修改默认配置属性,Property Manager -> 展开项目 -> Debug | x64 -> Microsoftt.Cpp.x64.user -> 右键 -> Properties
  5. 配置 OpenCV 的包含目录,点击 Edit... 打开编辑配置窗口
    配置 OpenCV 的包含目录,点击 Edit... 打开编辑配置窗口
  6. 要配置 include 目录本身,和该目录下的所有子目录,OpenCV4.x 的 include 下只有一个子目录,如图,而 OpenCV3.x 有两个,请根据实际情况配置。
    要配置 include 目录本身,和该目录下的所有子目录,OpenCV4.x 的 include 下只有一个子目录,如图,而 OpenCV3.x 有两个,请根据实际情况配置。
  7. 配置 OpenCV 库目录,同样的,打开编辑配置窗口操作
    配置 OpenCV 库目录,同样的,打开编辑配置窗口操作
  8. 复制文件名到这里,一行一个。这两个文件位于:CMake编译输出目录下/install/x64/vc15/lib。如果是 OpenCV3.x,则不能把 opencv_world345.lib 和 opencv_world345d.lib 同时加入,项目运行时会报错,只加带d的那个文件名,其中345是版本号。
    复制文件名到这里,一行一个。这两个文件位于:CMake编译输出目录下/install/x64/vc15/lib。如果是 OpenCV3.x,则不能把 opencv_world345.lib 和 opencv_world345d.lib 同时加入,项目运行时会报错,只加带d的那个文件名,其中345是版本号。
  9. 操作系统环境变量,path 添加配置项
    操作系统环境变量,path 添加配置项

友情提示:看到这里,如果按照上面的步骤操作的,该重启 vs2017 了,重启之后配置才会生效。

测试

在刚才建的项目下,添加一个 cpp 文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
Mat src = imread("C:/workspace/c++/images/img01.jpg");
imshow("opencv demo", src);
waitKey(0);
destroyAllWindows();
return 0;
}

其中 src 要指向你本地目录的一张图片。

创建新项目时,默认是x86,会提示有错,改成x64即可
创建新项目时,默认是x86,会提示有错,改成x64即可

改成x64正常编译之后运行,如果图片正常打开,恭喜你,配置正常,可以安心撸代码了。

后记

  • 2019-04-12
    新创建一个项目,找不到库引用。也就是说之前的配置没有生效。按照之前的操作,打开配置信息(位于 Property Manager -> 展开项目 -> Debug | x64 -> Microsoftt.Cpp.x64.user -> 右键 -> Properties),原来配置的信息都在。
    单独配置该项目
    单独配置该项目

但是打开项目属性:Solution Explorer -> 在项目名下点击右键 -> Properties,发现相关配置信息都没有。于是在这里重新配置一遍,具体操作与之前的配置一样。如此操作之后,库引用就正常了。

单独配置该项目
单独配置该项目

后来我才发现,其实是我疏忽了一点,新创建的项目(解决方案),默认是 x86 的,而我之前配置的是 x64,这两种编译模式需要分别配置,x86 的还没有配置过,所以在 x86 模式下,库引用是找不到的。

所以,新创建的项目(解决方案),需要首先把编译模式选成 x64,改完之后,如果代码显示依然为红色(我用了 ReSharper 插件),重新打开工程即可。

当然,如果你在 32 位操作系统下做开发,操持默认就好,只是记得要针对 x86 做配置(位于 Property Manager -> 展开项目 -> Debug | Win32 -> Microsoft.Cpp.Win32.user)。

项目编译模式,默认为 x86,如果没有针对 x86 做 OpenCV 的配置,代码会报错,提示找不到引用(包含)文件
项目编译模式,默认为 x86,如果没有针对 x86 做 OpenCV 的配置,代码会报错,提示找不到引用(包含)文件