VS2015下Cmake3.14.0 编译 Opencv3.4.0 及 opencv_contrib3.4.0 在 Windows10

为何需要自行编译opencv3.4与opencv_contrib3.4?
 
因为在3.0之后版本的Opencv对Sift、Sufer等新算法没有提供直接编译好的动态库来加载使用,因此必须自己编译。这是因为Sift、Sufer算法专利现在是属于哥伦比亚大学,因此opencv对这部分内容及“所谓的”不稳定模块全都放到opencv_contrib中。且只在它的Github中能够找到,opencv的官网上是没有的。因此对于想使用Sift、Sufer、双目立体匹配算法、结构光等新的算法及有专利权算法的同学需要自行编译。

一、下载opencv3.4与opencv_contrib3.4相对应的版本
1. 下载需要的opencv3.4版本源码 https://github.com/opencv/opencv/releases

PS: 这里也可以下载source code,只不过之后的 Cmake 阶段的时候,选择 source code的时候直接选择解压的目录即可。
在这里插入图片描述

2. 下载需要的opencv_contrib3.4版本源码(和opencv的子版本号一定要对应) https://github.com/opencv/opencv_contrib/releases

在这里插入图片描述


二、Cmake3.14 编译 OpenCV
1. 安装 Cmake3.14.0

安装包下载地址:https://cmake.org/download/
在这里插入图片描述
注意: 图中是3.14.4的版本,我没试过,我用的是3.14.0的版本。

2. 编译 Opencv3.4.0

源码路径“Source code”选择你刚才释放后的的Opencv3.4目录下的sources文件夹,本文解压到了D:/src/opencv3.4.0/opencv路径下,这个需要按照你的路径自行选择。

编译输出路径“build the binaries”,本文新建文件夹“Opencv34Build”路径为D:/src/opencv3.4.0/mybuild,同样这个需要按照你的路径自行选择。
在这里插入图片描述

单击“configure”;选择如下图设置(VS2015,x64),单击“Finish”即可开始编译。在这里插入图片描述

PS: 这个过程会出现很多错误需耐心反复编译,主要原因是他要从国外网站下载文件,若下载失败就编译不通过,以红色显示若失败,可在编译输出路径 D:\src\opencv3.4.0\build 中打开 CMakeDownloadLog.txt 文件里面有下载失败文件的连接及下载文件要保存到本地的路径。之后你自己可手动打开连接自己下载并放到指定的文件夹中。比如我遇到的:

失败: 下载 tiny-cnn 文件的时候遇到的下载失败的问题 ↓↓↓↓ 打开 CMakeDownloadLog.txt 查看。
在这里插入图片描述
解决: 从网上下载 tiny-dnn-1.0.0a3.tar.gz
在这里插入图片描述
将其拷贝到 CMakeDownloadLog.txt 相应目录下,并且将压缩包的文件名替换成 CMakeDownloadLog.txt 中的文件名,如图:
在这里插入图片描述
在可以选择 configuration 的项之后需要勾选以下几点:

BUILD_opencv_world: 主要是把所有的lib文件都弄到一个opencv_world340d.lib 中方便配置,若不勾选在最后会产生大概 38 个 .lib 文件,导致最后配置 Opencv3.4 到 vs2015 会太麻烦,有过Opencv2.x配置经验的都知道。

BUILD_EXAMPLES: 就是编译Opencv自带的例程。

配置完成后再次单击 Configure 即可,直到Cmake3.10没有红色显示为止。(有红色就继续点,非下载错误的话就先解决)


三、Cmake3.14 编译 OpenCV-contrib

选择 OPENCV_EXTRA_MODULES_PATH 把路径选择为解压的opencv_contrib3.4文件中的 modules 文件夹,即:D:/src/opencv3.4.0/opencv_contrib/modules。如下图:(注意路径反斜线,不然会出现转义的错误)
在这里插入图片描述

单击Configure

在这部分编译中同样会出现下载失败的情况,按照编译opencv3.4中的解决方式来解决,直到最后cmake输出界面显示:
在这里插入图片描述
单击Genarate

完成后,同样会出现 “Genarating done” 的字样。

四、VS2015的最后编译

使用VS2015打开 Cmake 编译目录:D:\src\opencv3.4.0\build 下的 OpenCV.sln,来打开项目。

编译为Debug X64 因此选择如下图。
在这里插入图片描述

此时即可开始编译即:生成->生成解决方案,随后漫长的等待。

PS: 与Python有关的错误不用考虑。

之后,选择 CMakeTargets下的 INSTALL 右键选择:仅用于项目 -> 仅生成INSTALL,之后会在 D:\src\opencv3.4.0\build 找到一个 install 文件夹即为最后编译生成的 Opencv3.4 配置需要文件。
在这里插入图片描述
至此,install 文件夹中的内容就是编译好的,VS2015中所需要的环境。可以单独保存到一个其他的文件夹下,以供VS2015调用,install 目录就可以删除掉了。

五、Opencv3.4 与 VS2015 的配置与测试

vs2015配置:

  • 添加环境变量(重启后才能生效):
    D:\env\VsOpencv3.4\x64\vc14\bin

  • 将以下目录,添加到“包含目录中”
    D:\env\VsOpencv3.4\include
    D:\env\VsOpencv3.4\include\opencv
    D:\env\VsOpencv3.4\include\opencv2

  • 将D:\env\VsOpencv3.4\x64\vc14\lib添加到 “库目录中”

  • 将opencv_world340d.lib添加到“附加依赖库中”

测试代码:

// FirstProject.cpp
//
#include <stdio.h>
#include <iostream>
#include "opencv2/opencv.hpp" 
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/xfeatures2d.hpp"

using namespace cv;

using namespace std;

int main()
{
	Mat img_1 = imread("D:\\dataset\\VOC\\VOC2007\\JPEGImages\\000148.jpg", CV_LOAD_IMAGE_COLOR);
	Mat img_2 = imread("D:\\dataset\\VOC\\VOC2007\\JPEGImages\\000149.jpg", CV_LOAD_IMAGE_COLOR);

	Ptr<Feature2D> sift = xfeatures2d::SIFT::create();

	vector<KeyPoint> keypoints_1, keypoints_2;
	Mat descriptors_1, descriptors_2;

	sift->detectAndCompute(img_1, noArray(), keypoints_1, descriptors_1);
	sift->detectAndCompute(img_2, noArray(), keypoints_2, descriptors_2);

	drawKeypoints(img_1, keypoints_1, descriptors_1, Scalar(0, 0, 255));
	drawKeypoints(img_2, keypoints_2, descriptors_2, Scalar::all(-1), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);

	imshow("img_1", descriptors_1);
	imshow("img_2", descriptors_2);
	waitKey(0);

	return 0;

}

结果如下:
在这里插入图片描述
恭喜!!! 成功了!!!

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值