Win10 编译安装 opencv-3.4.4 & opencv_contrib-3.4.4

最近需要在 Windows 环境下用 Visual Studio 2017 调试项目代码,需要用到 opencv 库,然后出此安装教程。

Linux 系统编译安装 opencv 见:Ubuntu 16.04 编译安装 opencv-3.4.4 & opencv_contrib-3.4.4

【重要】2018-12-19 最后更新:发现 opencv 3.4.4 在 win10 环境下,特征点检测有问题,故降低到 opencv 3.4.0,教程不变,你只需将 3.4.4 的源码替换成 3.4.0 即可。

1.准备过程

环境:Ubuntu 16.04
opencv-3.4.4 源码下载:https://github.com/opencv/opencv/archive/3.4.4.zip
opencv_contrib-3.4.4 源码下载:https://github.com/opencv/opencv_contrib/archive/3.4.4.zip

下载好后,分别解压,放在 opencv 文件夹中,然后在 opencv 文件夹中创建 build 文件夹,最后将 opencv 文件夹放在 C:\Users\你的用户名\ 

文件结构图

2.安装 CMake GUI

这里用的 3.11.3 版本的 CMake
下载地址:https://cmake.org/files/v3.11/cmake-3.11.3-win64-x64.msi 

3.用 CMake 生成 VS 工程

CMake 过程中会联网下载一些配置文件,由于众所周知的原因,国内网很容易下载不下来,然后报错,简单粗暴的解决方法就是翻墙。
安装好 CMake 之后,运行 CMake,先填写开头的两项

Where is the source code 是 opencv 源码路径,即“源路径”
Where to build the binaries 是要生成 opencv 的 vs 工程路径,即“目的路径”
点击 Configure,弹出对话框,选择编译工程的平台,选择 Visual Studio 15 2017 Win64

点击Finish,即开始配置。这需要一定的时间,期间要下载一些依赖项。
在完成第一次配置后,出现如下画面。 

此时再点一次 Configure,就全白了,然后再做两项改动

第一项是勾选 BUILD_opencv_world 选项,这样,在调用 dll 时,只调用这一个就行了,不用根据功能选择了。(建议,但非必须)

这第二项,自然是在 OPENCV_EXTRA_MODULES_PATH 选项中,填写opencv_contrib 解压目录下,modules文件夹的路径,这样就把 opencv_contrib编译进去了。

如果你想用 SURF,SIFT算法的话需要把 OPENCV_ENABLE_NONFREE 勾上,关于CUDA配置参考这篇文章

然后再按 Configure 进行配置,和前面一样,一次红,二次白,不在赘述了。
第二次全白了,就可以按 Generate 按键,生成 vs 工程文件了。

4.用 VS2017 编译 opencv 源代码 

生成工程完毕,在刚才说的“目的路径”下,可以看到 OpenCV 工程文件,右键用 VS2017 打开 OpenCV.sln

打开 VS 项目后,在Debug X64模式下,在菜单栏点击生成→生成解决方案,这个过程需要耐心等段一段时间

然后继续在 Debug X64模式下,在 INSTALL 上 点击右键→仅用于项目→仅生成 INSTALL。如下图所示

编译过程如下

完成编译后,切换到Release模式下进行同样的操作,先生成解决方案,后生成INSTALL

此时,有了 C:\Users\Lee\opencv\build\install 目录。
该目录包含了我们需要的头文件、库文件。

设置系统环境变量:C:\Users\Lee\opencv\build\install\x64\vc15\bin

这样就可以使用了

5.使用

使用很简单,点击菜单栏,视图→其他窗口→属性管理器

然后右键项目点击属性页

在VC++目录下的包含目录中,加入
C:\Users\Lee\opencv\build\install\include
C:\Users\Lee\opencv\build\install\include\opencv
C:\Users\Lee\opencv\build\install\include\opencv2
同时,在库目录中,加入
C:\Users\Lee\opencv\build\install\x64\vc15\lib

连接器→输入→附加依赖项中,根据需要,加入对应的库。

小技巧:

批量生成库文件名称的方法:

创建批处理:

@echo off
dir /b *344d.lib > lib.txt
dir /b *344.lib >> lib.txt
exit

放在 lib 目录下执行,就能生成文件列表了
将文件列表粘贴到“连接器→输入→附加依赖项”中

如下图,45 个带 d 的 debug 版 lib 写在前面,45 个不带 d 的 release 版 lib 写在后面,即优先支持 debug 模式的编译运行

lib 文件列表

我知道有的人懒癌附身,直接给出文件列表供你粘贴使用,仅适用于 3.4.4 版本的opencv

opencv_aruco344d.lib
opencv_bgsegm344d.lib
opencv_bioinspired344d.lib
opencv_calib3d344d.lib
opencv_ccalib344d.lib
opencv_core344d.lib
opencv_datasets344d.lib
opencv_dnn344d.lib
opencv_dnn_objdetect344d.lib
opencv_dpm344d.lib
opencv_face344d.lib
opencv_features2d344d.lib
opencv_flann344d.lib
opencv_fuzzy344d.lib
opencv_hdf344d.lib
opencv_hfs344d.lib
opencv_highgui344d.lib
opencv_imgcodecs344d.lib
opencv_imgproc344d.lib
opencv_img_hash344d.lib
opencv_line_descriptor344d.lib
opencv_ml344d.lib
opencv_objdetect344d.lib
opencv_optflow344d.lib
opencv_phase_unwrapping344d.lib
opencv_photo344d.lib
opencv_plot344d.lib
opencv_reg344d.lib
opencv_rgbd344d.lib
opencv_saliency344d.lib
opencv_shape344d.lib
opencv_stereo344d.lib
opencv_stitching344d.lib
opencv_structured_light344d.lib
opencv_superres344d.lib
opencv_surface_matching344d.lib
opencv_text344d.lib
opencv_tracking344d.lib
opencv_video344d.lib
opencv_videoio344d.lib
opencv_videostab344d.lib
opencv_xfeatures2d344d.lib
opencv_ximgproc344d.lib
opencv_xobjdetect344d.lib
opencv_xphoto344d.lib
opencv_aruco344.lib
opencv_bgsegm344.lib
opencv_bioinspired344.lib
opencv_calib3d344.lib
opencv_ccalib344.lib
opencv_core344.lib
opencv_datasets344.lib
opencv_dnn344.lib
opencv_dnn_objdetect344.lib
opencv_dpm344.lib
opencv_face344.lib
opencv_features2d344.lib
opencv_flann344.lib
opencv_fuzzy344.lib
opencv_hdf344.lib
opencv_hfs344.lib
opencv_highgui344.lib
opencv_imgcodecs344.lib
opencv_imgproc344.lib
opencv_img_hash344.lib
opencv_line_descriptor344.lib
opencv_ml344.lib
opencv_objdetect344.lib
opencv_optflow344.lib
opencv_phase_unwrapping344.lib
opencv_photo344.lib
opencv_plot344.lib
opencv_reg344.lib
opencv_rgbd344.lib
opencv_saliency344.lib
opencv_shape344.lib
opencv_stereo344.lib
opencv_stitching344.lib
opencv_structured_light344.lib
opencv_superres344.lib
opencv_surface_matching344.lib
opencv_text344.lib
opencv_tracking344.lib
opencv_video344.lib
opencv_videoio344.lib
opencv_videostab344.lib
opencv_xfeatures2d344.lib
opencv_ximgproc344.lib
opencv_xobjdetect344.lib
opencv_xphoto344.lib
VS2017 中设置

6.示例代码

我们运行一个检测角点并输出二值图的代码作为示例

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;

int main()
{
	Mat srcImage = imread("1.jpg", 0);
	imshow("原始图", srcImage);

	Mat cornerStrength;
	cornerHarris(srcImage, cornerStrength, 2, 3, 0.01);

	Mat harrisCorner;
	threshold(cornerStrength, harrisCorner, 0.00001, 255, THRESH_BINARY);

	imshow("角点二值图", harrisCorner);

	waitKey(0);
	return 0;
}

发表评论

您的电子邮箱地址不会被公开。