Visual Studio2017 使用cmake编译opencv4.0.1源码与contrib扩展库
Opencv官方下载链接中的Win pack版本是只支持官方自带的库和win64的如果想是用win32或者是使用SIFT特征检测、特征匹配等就需要自己使用cmake工具编译了~~
环境:Windows 10 ,Visual Studio 2017 ,cmake-3.14.0 ,opencv-4.0.1 ,opencv_contrib-4.0.1
Cmake工具下载
Cmake工具下载链接,直接下载压缩包格式的免除安装和配置环境变量,64位的系统下载win64版本,32位的系统下载win32版本.
下载下来解压,路径最好不要存在中文。启动程序在cmake-3.14.0-win64-x64\bin目录下
Opencv源码和contrib扩展库源码下载
Opencv4.0.1源码下载链接
Opencvcontrib扩展库源码下载链接
注意版本号的选择这里选的是4.0.1
我编译好的4.0.1版本的DebugX64版本百度云链接提取码yzch
将下载后的文件解压,注意文件完整性如果解压的时候没有出错提示文件损坏之类的就说明正常,如果解压过程有问题说明可能网络原因下载的不全,这时只能重新下载
为了下载方便我这里把4.0.1版本的云盘链接贴到这 提取码ui5x
Cmake编译源码
打开cmake-gui.exe选择你刚才源文件解压的目录,以及创建并选择生成文件的存放目录(建议使用它后面的Browse 选择目录这样不容易出错),如图
点击Configure选择VS2017以及W64版本,然后Finish
等待进度条的完成,这里第一次会下载很多东西,如果能科学上网 的话会好一些,如果没有科学上网 的手段并且下载失败或者因下载不完整导致后面VS中编译出错可以参考该视频2P中提到的方法找到下载链接手动下载
下载完成后会提示Configuring done如图
在Search后面文本框中搜索OPENCV_EXTRA_MODULES_PATH然后点后边的三个小点 选择\opencv_contrib-4.0.1\modules目录
如果要使用SIFT、SURF等模块,复制OPENCV_ENABLE_NONFREE到Search,然后把Value中框勾选上,再次点击Configuring
等到Configuring done出现,再次点击Configuring,下次完成上面的红色区域就会变成白色,然后点击Configuring旁边的Generate
等待进度条完成后点击Open Project 或者打开生成文件的目录找到OpenCV.sln运行
Visual Studio编译
用上面的方法打开OpenCV.sln,等待VS检查加载文件。然后点击右侧的解决方案->批生成,并选中以下四项,最后点击生成即可,等待时间十分漫长
等待结果
在编译的时候我遇到了无法打开 python36_d.lib错误,因为我的Python是在anaconda中安装的,并且安装了好多版本。我的解决办法是在anaconda安装目录中搜索pyconfig.h ,因为我安装了多个版本所以搜索出了一大堆,经过我的尝试我按照这篇帖子下面的方法更改了Anaconda3\include 目录下的pyconfig.h文件解决。
最后生成的需要用到的东西都在\install路径下所以将除install的文件都删掉就行了,这样可以省去大量的空间。
配置VS+opencv
将E:\OPEN_CV\opencv-4.0.1x64\install\x64\vc15\bin 添加到系统环境变量path中 设置自己的路径不要直接复制我的
新建一个VS工程后,以Debug为例,点击项目->属性->VC++目录-> 设置包含目录和库目录
附加依赖项添加E:\OPEN_CV\opencv-4.0.1x64\install\x64\vc15\lib目录下的lib文件,Debug模式下只用添加后缀带d.lib的文件
直接将下面的复制粘贴就行了
opencv_aruco401d.lib
opencv_bgsegm401d.lib
opencv_bioinspired401d.lib
opencv_calib3d401d.lib
opencv_ccalib401d.lib
opencv_core401d.lib
opencv_datasets401d.lib
opencv_dnn_objdetect401d.lib
opencv_dnn401d.lib
opencv_dpm401d.lib
opencv_face401d.lib
opencv_features2d401d.lib
opencv_flann401d.lib
opencv_fuzzy401d.lib
opencv_gapi401d.lib
opencv_hdf401d.lib
opencv_hfs401d.lib
opencv_highgui401d.lib
opencv_img_hash401d.lib
opencv_imgcodecs401d.lib
opencv_imgproc401d.lib
opencv_line_descriptor401d.lib
opencv_ml401d.lib
opencv_objdetect401d.lib
opencv_optflow401d.lib
opencv_phase_unwrapping401d.lib
opencv_photo401d.lib
opencv_plot401d.lib
opencv_reg401d.lib
opencv_rgbd401d.lib
opencv_saliency401d.lib
opencv_shape401d.lib
opencv_stereo401d.lib
opencv_stitching401d.lib
opencv_structured_light401d.lib
opencv_superres401d.lib
opencv_surface_matching401d.lib
opencv_text401d.lib
opencv_tracking401d.lib
opencv_video401d.lib
opencv_videoio401d.lib
opencv_videostab401d.lib
opencv_xfeatures2d401d.lib
opencv_ximgproc401d.lib
opencv_xobjdetect401d.lib
opencv_xphoto401d.lib
这里我也遇到了一个坑,因为我之前配置过opencv3.4的版本导致它 从父级过项目默认设置继承 中总是存在之前的配置路径,
解决办法 视图->其他窗口->属性管理器->出现在屏幕右侧对应Debug|x64下的->Microsoft.Cpp.x64.user文件,打开它,在里面可以编辑和删除自己想要的目录。
项目中放一张图片,测试一下代码
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/xfeatures2d.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
using namespace cv::xfeatures2d;
using namespace std;
int main(int argc, char** argv) {
Mat img_1 = imread("1.jpg", IMREAD_GRAYSCALE);
if (img_1.empty()) {
printf("could not load image...\n");
return -1;
}
imshow("input image", img_1);
int minHessian = 700;
Ptr<SURF> detector = SURF::create(minHessian);
vector<KeyPoint> keypoints;
detector->detect(img_1, keypoints);
Mat img_keypoints1;
drawKeypoints(img_1, keypoints, img_keypoints1, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
namedWindow("key points");
imshow("key points", img_keypoints1);
waitKey(60000);
return 0;
}
希望这篇文章对您有帮助,感谢阅读!