win10+vs2017+opencv3.4.3+cmake配置opencv contrib过程和注意事项
1.为什么要装opencv contrib
opencv只包含基本内容,如果需要用到surf特征提取等内容因为版权问题必须安装opencv_contrib
2.安装需要的文件获取
vs2017:https://visualstudio.microsoft.com/zh-hans/downloads/
opencv:https://opencv.org/releases.html
我用的是opencv3.4.3版本,你可以选择自己喜欢的版本,但是要注意后期下载opencv_contirb时要选择对应的版本,否则可能失败
cmake:https://cmake.org/download/
cmake有很多版本,一般建议选择下载绿色版或安装版,其他版本我没用过,不知道怎么用
opencv_contrib: https://github.com/opencv/opencv_contrib
请一定选择和opencv一样的版本号,不然可能会出错。下载完成之后解压即可。
这一步基本就是这四个了。
3.安装vs2017,opencv_contrib和cmake
这一步很简单,vs2017直接安装就可以了,这是一个比较详细的安装和使用过程,有不懂的小伙伴可以参考一下
opencv下载之后是一个自解压程序,双击解压即可,需要选择一个合适的目录,为了保险最好是没有其他符号和中文的,我选择的目录是D:/document/Cpp,所以接下来的操作中我的opencv文件目录都是这个。
如果你下载的是安装版(msi)的cmake,则直接正常安装即可,要注意的是把他添加到系统环境中,不要选错了,因为默认是不添加的。
4.配置opencv_contrib
- 第一步到第五步的操作都是在Cmake中进行的。首先打开cmake,where is the source code 选择opencv文件夹中source的目录,我的是D:/document/Cpp/opencv/sources,你可以根据实际情况更改目录
- where to build the binaries 选择需要存放生成文件的目录,根据其他教程我选择的是D:/document/Cpp/opencv/new_bulid 这里要注意的是我们选择的目录最好还在opencv文件夹中,但不能是opencv文件夹中原有的目录,命名你开心就好,但最好是纯英文
- 点击configure,第一次使用会弹出对话框,选择对应的vs版本即可,其他的不用管。我的是vs2017 64位,所以我选择的是vs2017 Win64,之后点确认,程序开始运行,运行完成后会在最下方显示configuration done.
- 在cmake搜索框中搜索OPENCV_EXTRA_MODULES_PATH,将其值选择为opencv_contrib文件夹中的modules文件夹,我的是D:\document\Cpp\opencv\opencv_contrib-3.4.3,你需要选择对应的文件夹。同时要保证WITH_CUDA未被勾选,我的默认是不勾选的。最后再一次点击configure,成功之后依然会在最下边显示configuration done.对了,这两次点击之后都要等比较长的时间
- 点击generate,这一次很快。然后直接在cmake面板点击open project打开项目。至此Cmake中的操作全部完成,可以关掉它了。
- 第六步之后的操作都是在vs2017中完成的。在第五步中已经打开了项目文件,因此接下来继续操作就好了。首先是选择64或32位的Debuge和Release,在菜单栏选择生成->生成解决方案,每次都需要十几分钟的等待,会提示生成的情况,我的是成功140个,有的可能会少,具体原因不是很清楚,但可以先往下进行。
- 之后右键CMakeTargets中的INSTAKLL,选择仅限于项目->仅生成INSTALL,等待一小会就好了。
- 接下来是系统环境配置,这一步引用自添加OpenCV_contrib库至OpenCV3.1.0中(Windows 64位 环境下编译OpenCV3.1.0和OpenCV_contrib)的配置环境变量部分,为了文章完整性我将这些内容粘贴了过来
1、重新配置环境变量
①、环境变量设置:
变量名:OPENCV
变量值:*\opencv\new_build\install
注:*表示安装目录②、用户变量配置:
*\opencv\new_build\install\x64\vc14\bin
注:*表示安装目录2、重新配置项目环境
①、包含目录:
*\opencv\new_build\install\include
*\opencv\new_build\install\include\opencv
*\opencv\new_build\install\include\opencv2
注:*表示安装目录②、库目录:
*\opencv\new_build\install\x64\vc14\lib
*\opencv\new_build\install\x64\vc14\staticlib
注:*表示安装目录③、附加依赖项:
opencv_aruco310d.lib
opencv_bgsegm310d.lib
opencv_calib3d310d.lib
opencv_ccalib310d.lib
opencv_core310d.lib
opencv_datasets310d.lib
opencv_dnn310d.lib
opencv_dpm310d.lib
opencv_face310d.lib
opencv_features2d310d.lib
opencv_flann310d.lib
opencv_fuzzy310d.lib
opencv_hdf310d.lib
opencv_highgui310d.lib
opencv_imgcodecs310d.lib
opencv_imgproc310d.lib
opencv_line_descriptor310d.lib
opencv_ml310d.lib
opencv_objdetect310d.lib
opencv_optflow310d.lib
opencv_photo310d.lib
opencv_plot310d.lib
opencv_reg310d.lib
opencv_rgbd310d.lib
opencv_saliency310d.lib
opencv_shape310d.lib
opencv_stereo310d.lib
opencv_stitching310d.lib
opencv_structured_light310d.lib
opencv_superres310d.lib
opencv_surface_matching310d.lib
opencv_text310d.lib
opencv_tracking310d.lib
opencv_ts310d.lib
opencv_video310d.lib
opencv_videoio310d.lib
opencv_videostab310d.lib
opencv_xfeatures2d310d.lib
opencv_ximgproc310d.lib
opencv_xobjdetect310d.lib
opencv_xphoto310d.lib
ippicvmt.lib3、复制有关动态库至系统目录下
将*\opencv\new_build\install\x64\vc14\bin下的dll文件复制至 C:\Windows\System32 和 C:\Windows\SysWOW64 目录下。
--------------------- 作者:_MICHAEL_LIU_ 来源:**** 原文:https://blog.****.net/liu798675179/article/details/51259505?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!- 注意:在添加依赖项中不能直接粘贴过去,而是要看你的bin目录下有哪些lib文件,然后将其文件名一个一个粘贴过来,这个过程很麻烦,因此我写了一个C++小程序实现这个功能,实现代码如下。
// Find_Filename.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //功能:扫描特定目录下的所有件名,并返回和保存文件名 //唐明弘 2018/10/10 星期三 #include "pch.h" #include <io.h> #include <string> #include <vector> #include <iostream> #include <fstream> using namespace std; //获取特定格式的文件名 void getAllFiles(string path, vector<string>& files, vector<string>& filename, string format) { long hFile = 0;//文件句柄 64位下long 改为 intptr_t struct _finddata_t fileinfo;//文件信息 string p; if ((hFile = _findfirst(p.assign(path).append("\\*" + format).c_str(), &fileinfo)) != -1) //文件存在 { do { if ((fileinfo.attrib & _A_SUBDIR))//判断是否为文件夹 { if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)//文件夹名中不含"."和".." { files.push_back(p.assign(path).append("\\").append(fileinfo.name)); //保存文件夹名 getAllFiles(p.assign(path).append("\\").append(fileinfo.name), files, filename,format); //递归遍历文件夹 } } else { files.push_back(p.assign(path).append("\\").append(fileinfo.name));//如果不是文件夹,储存文件名 filename.push_back(fileinfo.name); } } while (_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } } int main() { string filePath = "D:\\document\\Cpp\\opencv\\new_bulid\\install\\x64\\vc15\\bin"; vector<string> files; vector<string> filename; string format = ""; //查找文件的格式 getAllFiles(filePath, files,filename,format); int size = files.size(); for (int i = 0; i < size; i++) { cout << files[i] << endl; } int size1 = filename.size(); ofstream outfile("filename.txt", ios::trunc); for (int j = 0; j < size; j++) { outfile << filename[j]<< "\n"; cout << filename[j] << " was stored!" << endl; } outfile.close(); system("pause"); return 0; }
这个程序将会把目录下的所有文件名保存在Filename.txt文件中,我们只需要找出其中的dll文件即可。
配置工作到此就全部完成了。