VS2017配置OpenCV3.2+contrib3.2
VS2017配置OpenCV3.2+contrib3.2
前言
opecv3.2+opencv_contrib3.2模块都编译配置了
在配置contrib之前,尝试直接配置OpeCV3.2-vc14,发现可以正常使用,也就是说官方包虽然只有vc14,但vs2017(vc15)也支持的很好。
操作环境:WIN10 64bit ,VS2017社区版,CMake-3.8.0-rc3
准备文件:opencv3.2.zip,opencv_contrib-3.2.0.zip
【ippicv_windows_20151201.zip protobuf-cpp-3.1.0.tar.gz】
上述两个用于编译的文件常常由于下载缓慢或者无法下载导致编译失败。大家可以直接在CSDN上搜索到,如果有需要,后期我会上传补充。
goturn是我需要的一个训练模型【无视】
doc是官方离线文档【可选】
extra是跑例程需要的dataset【可选】
其他几个就是上文提到的需要注意的是:Cmake最好到官网下载较新的版本,否则无法检测到VS2017.这里使用CMake3.8版本,其次contrib模块也要相对应3.2版本,否则很难编译通过,接下来我们就可以开始了
本文中的路径都是相对于我的,你的路径根据实际会有所不同
编译OpenCV3.2
- 解压OpenCV3.2。在解压后的OpenCV3.2的目录里新建文件夹并命名为myBuild(主要是和原Build文件夹区分)
- 解压opencv_contrib-3.2.0(建议移动到OpenCV3.2目录下,方便后期查找和操作)
- 解压并打开Cmake。如果是免安装程序,就到cmake的解压目录的
bin里双击cmake-gui.exe 如下图
4.在cmake的地址栏填入地址
where is the source code 填你的OpenCV3.2的source目录
where to build the biliaries 填刚建立的myBuild
如图是我的路径。你要看你的具体目录来填写
然后点击【Configure】会弹出选择VS的界面,我选的是vs2017 win64
再次点击【Configure】
该过程是需要联网的,甚至需要帆樯。否则可能出现ERROR:not find 等,一般就是上述提到的两个文件。
将ippicv_windows_20151201.zip放到myBuild/3rdparty/ippicv里,再次【Configure】
编译contrib模块
configure done后,找到OPENCV_EXTRA_MODULES_PATH
将其设置为opencv_contrib/modules的路径
特别注意生成静态库是一定要去除
下面三个模块:
BUILD_EXAMPLES
BUILD_TEST
BUILD_PERF_TESTS
否则编译之后大小会很大50G左右
如图我的路径。然后【configure】
由于CMakeLists.txt中下载dnn模块的链接失效,所以需要自己另行下载并移到opencv_contrib-3.2.0/modules/dnn/.download/bd…./v3.1.0
如图路径
然后【Configure】完成后就可以【Generate】了
然后再点击【Open Project】这会自动打开vs2017
也可以到myBuild里找到OpenCV.sln打开。
打开vs2017后一般可以直接看到【解决方案资源管理器】一栏,没有就点击【视图v】-【解决方案资源管理器p】,可以看到OpenCV的解决方案
选择你需要的平台
右键解决方案重新生成
待结束后,点开CmakeTargets–>INSTALL,右键->【仅用于项目】->【仅生成INSTALL】 等待完成。我这里是成功113,跳过7个。
myBuild最后大概有6.5G【有很多垃圾文件】
生成后把opencv和contrib综合了起来。所以配置的时候只需要用myBuild/install了。
这是myBuild里的文件
由于垃圾文件很多myBuild里可以只留下install,其他都可以删掉
同时建议把opencv,contrib里面的源码留下。我整理如下
分别对应myBuild,opencv源码+sample,contrib源码+samples
整个OpenCV3.2缩小到600+Mb
方便以后查看
接下来就和配置普通版本一样了。
配置环境变量
- 右键电脑【属性】
- 【高级系统设置】
- 【环境变量】
- 【系统变量】【Path】
- 在变量值后加
;D:\Win10soft\OpenCV3.2\myBuild\install\x64\vc15\bin
注意这要改成你的路径,多个变量值以英文分号分开
配置库目录和包含目录
1. 先新建一个工程
【文件】->【新建】->【项目】
确定,在下一步选择空项目。
将上方切换至Debug/Release x64,这个根据需要视情况而定。
打开属性管理器,如果主界面没有,就点击【视图】->【属性管理器】
因为我们刚刚生成的是Release x64,所以这里我们点开Release|x64
右键再点属性开始配置
1.【通用属性】->【VC++目录】->【包含目录】
添加
D:\Win10soft\OpenCV3.2\myBuild\install\include
D:\Win10soft\OpenCV3.2\myBuild\install\include\opencv
D:\Win10soft\OpenCV3.2\myBuild\install\include\opencv2
【确定】
2.【库目录】
D:\Win10soft\OpenCV3.2\myBuild\install\x64\vc15\lib
【确定】
点击【应用】
3.【通用属性】->【链接器】->【输入】->【附加依赖项】
添加如下库(41个 Debug)
添加如下库(41个 Debug)
opencv_aruco320d.lib
opencv_bgsegm320d.lib
opencv_bioinspired320d.lib
opencv_calib3d320d.lib
opencv_ccalib320d.lib
opencv_core320d.lib
opencv_datasets320d.lib
opencv_dnn320d.lib
opencv_dpm320d.lib
opencv_face320d.lib
opencv_features2d320d.lib
opencv_flann320d.lib
opencv_fuzzy320d.lib
opencv_highgui320d.lib
opencv_imgcodecs320d.lib
opencv_imgproc320d.lib
opencv_line_descriptor320d.lib
opencv_ml320d.lib
opencv_objdetect320d.lib
opencv_optflow320d.lib
opencv_phase_unwrapping320d.lib
opencv_photo320d.lib
opencv_plot320d.lib
opencv_reg320d.lib
opencv_rgbd320d.lib
opencv_saliency320d.lib
opencv_shape320d.lib
opencv_stereo320d.lib
opencv_stitching320d.lib
opencv_structured_light320d.lib
opencv_superres320d.lib
opencv_surface_matching320d.lib
opencv_text320d.lib
opencv_tracking320d.lib
opencv_video320d.lib
opencv_videoio320d.lib
opencv_videostab320d.lib
opencv_xfeatures2d320d.lib
opencv_ximgproc320d.lib
opencv_xobjdetect320d.lib
添加如下库 (41个Release)
添加如下库(41个Release)
添加如下库(41个Release)
opencv_aruco320.lib
opencv_bgsegm320.lib
opencv_bioinspired320.lib
opencv_calib3d320.lib
opencv_ccalib320.lib
opencv_core320.lib
opencv_datasets320.lib
opencv_dnn320.lib
opencv_dpm320.lib
opencv_face320.lib
opencv_features2d320.lib
opencv_flann320.lib
opencv_fuzzy320.lib
opencv_highgui320.lib
opencv_imgcodecs320.lib
opencv_imgproc320.lib
opencv_line_descriptor320.lib
opencv_ml320.lib
opencv_objdetect320.lib
opencv_optflow320.lib
opencv_phase_unwrapping320.lib
opencv_photo320.lib
opencv_plot320.lib
opencv_reg320.lib
opencv_rgbd320.lib
opencv_saliency320.lib
opencv_shape320.lib
opencv_stereo320.lib
opencv_stitching320.lib
opencv_structured_light320.lib
opencv_superres320.lib
opencv_surface_matching320.lib
opencv_text320.lib
opencv_tracking320.lib
opencv_video320.lib
opencv_videoio320.lib
opencv_videostab320.lib
opencv_xfeatures2d320.lib
opencv_ximgproc320.lib
opencv_xobjdetect320 .lib
确定确定应用。
此时你已配置好了Release|x64的OpenCV+contrib3.2
重启一下,试试读取图片吧
测试代码
#include<iostream>
#include<opencv2/opencv.hpp>
int main(int argc,char** argv){
cout<< cv_version<<endl;
Mat src=imread("you own path of pictures");
imshoe("hello world!",src);
waitKey(0);
return 0;
}
在移动工程时偶然发现,该工程居然有101Mb,而这只是读取一张图片而已。查看文件夹,合计也才几mb文件,然后打开了文件管理器的查看,显示隐藏。
发现一个隐藏文件夹
查看属性果然很大,我将隐藏文件夹内的内容删除,并打开属性显示。然后打开工程。发现在加载工程过程中,该隐藏文件夹,不断增长。然后跑了surf匹配,结果工程变成了180多Mb.
有些难以置信。以前在VS2013上8个cpp,代码近万行的工程才80多mb。目前没有找到原因,猜测可能是因为:VS2017为加快处理速度的新特性,或者是我在安装VS时,选择安装项不合理导致。
针对上面只生成三个文件,且没有x64的,默认为生成的bin文件为64位,最新的vs2017生成库更简洁,并不影响使用。其余情况也可以按照这个处理。
相关文章:

【ACM】二叉搜索树(Binary Search Tree /BS Tree) 小结
动态管理集合的数据结构——二叉搜索树 搜索树是一种可以进行插入,搜索,删除等操作的数据结构,可以用字典或者优先队列。 二叉排序树又称为二叉查找树,他或者为空树,或者是满足如下性质的二叉树。 (1&…

android安卓动态设置控件宽高
LayoutParams layoutParamsp_w_picpathView.getLayoutParams();layoutParams.width100;layoutParams.height200;p_w_picpathView.setLayoutParams(layoutParams);转载于:https://blog.51cto.com/11020803/1860242

《深入java虚拟机》读书笔记类加载
概述 类加载机制是指虚拟机将描述类的数据从Class文件中加载到内存,并进行数据验证、解析、初始化等过程,最后形成可以直接被虚拟机使用的java类型。在java语言中类的加载、链接、初始化等过程并不是在编译时期完成,而是在运行时期才进行的&a…
SLAM之特征匹配(一)————RANSAC-------OpenCV中findFundamentalMat函数使用的模型
目录 1.RANSAC原理 2. RANSAC算法步骤: 3. RANSAC源码解析 step one niters最初的值为2000,这就是初始时的RANSAC算法的循环次数,getSubset()函数是从一组对应的序列中随机的选出4组(因为要想计算出一…

I hope so 2016-Oct-10
2019独角兽企业重金招聘Python工程师标准>>> <I hope so> - A joke A: Do you think your son will forget all he learned at college? B: I hopse so. He certainly cant make a living by kissing girls! 转载于:https://my.oschina.net/u/553266/blog/75…
【Codeforces】158B-Taxi(贪心,怎么贪咧)
贪心 emmmm http://codeforces.com/contest/158/problem/B 题目大意:有四种旅客,四人一组,三人一组,两人一组,一人一组,一辆出租车最多可以坐四个人,并且一组里的人必须坐一辆车,…

90 后 CTO 创业 6 年,做了一件改变互联网的“小事”
TGO 鲲鹏会在武汉举行了一场线下分享活动 —— 冲破壁垒,打造精英的技术团队 。来自极验的 90 后 CTO 黄胜蓝分享了他的团队故事,以及在他看来一个创新团队应该具备的特征。极验 CTO \u0026 TGO 鲲鹏会会员黄胜蓝在现场进行分享 1. 创新:非典…
ORB特征(二)
为了满足实时性的要求,前面文章中介绍过(具体链接如下)快速提取特征点算法Fast,以及特征描述子Brief。本篇文章介绍的ORB算法结合了Fast和Brief的速度优势,并做了改进,且ORB是免费Ethan Rublee等人2011年在《ORB&#…

【POJ】2377 Bad Cowtractors(最大生成树)
简单题,模板题 求解最大生成树,提交一直WA,感觉没有什么问题啊,就是在求解最小生成树的模板基础上稍加修改即可,后来发现在输出a,b,c给map二维数组的时候还必须有判断条件,略为有点…
使用let替换var实现块级作用域的小发现
在讲述javascript没有块级作用域的时候都会提到一个非常经典的例子: var obj{name:helo,age:15 }; var arr[];for(var i0;i<5;i){arr[i]i;console.log(i);} console.log(arr); console.log(i);因为javascript没有块级作用域,所以控制台打印出来的结果…

windows系统下node、npm的安装和卸载
Greta有话说:我是在有道云笔记只弄个记录的笔记,粘贴过来之后,没有图片,我的笔记地址为: 有道云笔记,请点我 一、卸载 1、node.js、nvm、 npm (1)在cmd中输入where node找到node…
OpenCV4Android开发实录(2): 使用OpenCV3.4.1库实现人脸检测
OpenCV4Android开发实录(2): 使用OpenCV3.3.0库实现人脸检测 转载请声明出处:http://write.blog.csdn.net/postedit/78992490OpenCV4Android系列: 1. OpenCV4Android开发实录(1):移植OpenCV3.3.0库到Android Studio 2.OpenCV4Andr…
活动|跟着微软一起,拥抱开源吧!
由开源社主办的中国开源年会2016 (COSCon16 - China Open Source Conference 2016) 即将于今年10月15日-16日在北京举办。微软大咖将为您呈现区块链,容器,大数据,Xamarin等时下热点技术,参会者还可获取价值1,500 元 Azure 服务使用…

【HDU/算法】最短路问题 杭电OJ 2544 (Dijkstra,Dijkstra+priority_queue,Floyd,Bellman_ford,SPFA)
最短路径问题是图论中很重要的问题。 解决最短路径几个经典的算法 1、Dijkstra算法 单源最短路径(贪心),还有用 priority_queue 进行优化的 Dijkstra 算法。 2、bellman-ford算法 例题:【ACM】POJ 3259 Wormholes 允许负权边…

javaSE基础知识 1.5整数类型
整数的四种声明类型它们分别是,byte,short,int,long,这四种类型所占用的空间是不同的byte是占用1个字节,它的取值范围是 -128~127,short是占用2个字节,他的取值范围是-32768~32767&a…

源码分析-GLSurfaceView的内部实现
GLSurfaceView类是继承自SurfaceView的,并且实现了SurfaceHolder.Callback2接口。GLSurfaceView内部管理着一个surface,专门负责OpenGL渲染。GLSurfaceView内部通过GLThread和EGLHelper为我们完成了EGL环境渲染和渲染线程的创建及管理,使我们…

【POJ/算法】 3259 Wormholes(Bellman-Ford算法, SPFA ,FLoyd算法)
Bellman-Ford算法 Bellman-Ford算法的优点是可以发现负圈,缺点是时间复杂度比Dijkstra算法高。而SPFA算法是使用队列优化的Bellman-Ford版本,其在时间复杂度和编程难度上都比其他算法有优势。 Bellman-Ford算法流程分为三个阶段: 第一步&am…

进程控制概念简介 多线程上篇(三)
进程控制 进程的基本数据信息是操作系统控制管理进程的数据集合,这些信息就是用来控制进程的,此处我们说的进程控制就是进程的管理。比如进程有状态,那么进程的创建、终止,状态的切换,这都不是进程自主进行的ÿ…

Android OpenGL使用GLSurfaceView预览视频
Android OpenGL使用GLSurfaceView预览视频第一章 相关知识介绍在介绍具体的功能之前,先对一些主要的类和方法进行一些介绍,这样可以更好的理解整个程序1.1 GLSurfaceView在谷歌的官方文档中是这样解释GLSurfaceView的:An implementation of S…

【Android 基础】Animation 动画介绍和实现
转载自:http://www.cnblogs.com/yc-755909659/p/4290114.html1.Animation 动画类型Android的animation由四种类型组成:XML中alph渐变透明度动画效果scale渐变尺寸伸缩动画效果translate画面转换位置移动动画效果rotate画面转移旋转动画效果JavaCode中Alp…

【Codeforces】1111B - Average Superhero Gang Power
http://codeforces.com/problemset/problem/1111/B n 表示要输入的数据的个数 k 最每一个数据最多可以进行多少次操作 m 一共可以进行多少次操作 一次操作:删除这个数,或者给这个数加1 如果n为1的话,那么只要找出m和k的最小值加到那个数…
刷前端面经笔记(七)
1.描述一下渐进增强和优雅降级 优雅降级(graceful degradation):一开始就构建站点的完整功能,然后针对浏览器测试和修复。渐进增强(progressive enhancement):一开始只构建站点的最少特性,然后不断针对各浏览器追加功能。 2.为什么…

AR资料与连接梳理
AR引擎相关技术 ------------------------------ ARcore:https://developers.google.cn/ar/discover/ ARkit:https://developer.apple.com/arkit/ 以上重点关注,比较新有一些新的功能大家可以自行体验。 ARToolkithttp://www.artoolkit.orght…

Queues 队列
1. Definiation What is a queue? A queue is a list. With a queue, inseration is done at one end (known as rear) whereas deletion is performed at the other end (known as front). 2. Operations 指针对列 无法自定义队长 // array queue #include<iostream> u…

【HDU】1005 Number Sequence (有点可爱)
http://acm.hdu.edu.cn/showproblem.php?pid1005 A number sequence is defined as follows: f(1) 1, f(2) 1, f(n) (A * f(n - 1) B * f(n - 2)) mod 7. Given A, B, and n, you are to calculate the value of f(n). 直接递归求解f(n)的话,会MLE 在计算…
CNCF案例研究:奇虎360
公司:奇虎360地点:中国北京行业:计算机软件 挑战 中国软件巨头奇虎360科技的搜索部门,so.com是中国第二大搜索引擎,市场份额超过35%。该公司一直在使用传统的手动操作来部署环境,随着项目数量的…

C#代码实现对Windows凭据的管理
今天有个任务,那就是使用C#代码实现对windows凭据管理的操作。例如:向windows凭据管理中添加凭据、删除凭据以及查询凭据等功能。于是乎,就开始在网上查找。经过漫长的查询路,终于在一片英文博客中找到了相关代码。经过实验&#…

Android:JNI 与 NDK到底是什么
前言 在Android开发中,使用 NDK开发的需求正逐渐增大但很多人却搞不懂 JNI 与 NDK 到底是怎么回事今天,我将先介绍JNI 与 NDK & 之间的区别,手把手进行 NDK的使用教学,希望你们会喜欢 目录 1. JNI介绍 1.1 简介 定义&…
【ACM】LightOJ - 1008 Fibsieve`s Fantabulous Birthday (找规律,找...)
https://vjudge.net/problem/LightOJ-1008 题目很好理解,第一行表示测试样例的个数,接下来输入一个大于等于1的数,按照格式输出这个数的坐标 蓝色的是 奇数的平方; 红色的是 偶数的平方; 黄色的是对角线:…
Computed property XXX was assigned to but it has no setter
报错视图: 原因: 组件中v-model“XXX”,而XXX是vuex state中的某个变量vuex中是单项流,v-model是vue中的双向绑定,但是在computed中只通过get获取参数值,没有set无法改变参数值解决方法: 1.在co…