【OpenCV入门教程之二】OPENCV3 开源之美 — 编译源代码、配置opencv_contrib
为什么要配置opencv_contrib?
opencv3.0版本 功能更加模块块,一些功能模块不够完善,等足够完善在merge到主分支中,而我们图像识别中要用到的SIFT等算法被封装在xfeacture模块并且不在主分支,所以要用的时候需要编译它
[ opencv_contrib-github地址 ]
工具准备
- VS2013 (VS系列,我这边用的是2013版本)
- cmake
想要在Windows平台下生成OpenCV的解决方案,我们需要一个名为cmake的开源软件,可以在camke的官网:http://www.cmake.org/上下载到- 首先转到其下载页面。下载页面的Source distributions处可以下载到cmake软件的源码,如果对这款开源软件感兴趣,不妨看看
- 而Binary distributions处可以下载到cmake的执行文件,我们只需要下载到其执行文件即可,选择Windows (Win32 Installer)进行下载,点击这里直接下载:http://www.cmake.org/files/v3.4/cmake-3.4-win32-x86.exe, 安装教程挺简单的,略(上面步骤实在不会,可参考:ORZ浅墨大神)
使用cmake生成OpenCV源代码工程的解决方案
在上面的github README.md里面有提供详细的教程
有两种方案选择:
- You can build OpenCV, so it will include the modules from this repository. Here is the CMake command for you:
$ cd <opencv_build_directory>
$ cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory>
$ make -j5
As the result, OpenCV will be built in the with all modules from opencv_contrib repository. If you don’t want all of the modules, use CMake’s BUILD_opencv_* options. Like in this example:
$ cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules -DBUILD_opencv_legacy=OFF <opencv_source_directory>
用命令行简单粗暴,不过我在使用的时候出现错误,说缺少某些库文件,google了一番说还要要控制其他参数,为了弄个万能教程,我们采用下面的方法
- cmake-gui
If you prefer using the gui version of cmake (cmake-gui), then, you can add opencv_contrib modules within opencv core by doing the following:- 启动cmake-gui
- 选择opencv source code 文件夹 和 where binaries will be built个人的存放如图所示,注意build里面的内容是之后要进行opencv配置的
- 按configure按钮进行进行第一次configure,第一次时间有点长,成功之后如上图所示
- 在search那里搜索
OPENCV_EXTRA_MODULES_PATH并在value那栏选择文件夹的方式(browse button)找到opencv_contrib的存放地址(/modules) - 再次按下configure button,之后在按generate button
- 看到Generating done字样,没有报错,大功告成
可以去之前我们指定的D:\opencv3\opencv\build下找寻我们生成的解决方案了。
INSTALL
用cmake工具生成解决方案之后,还要做的一步就是install,如果是用命令行的方式,只需要 cmake install
或者将解决方案sln导入VS
1. 打开OpenCV的解决方案,右击CMakeTargets下的INSTALL,选择“生成”,生成Debug版的dll和lib
2. 如果需要Release的话,修改配置为“Release”,重复步骤1,生成Release版的dll和lib
3. 生成完毕,在OpenCV解决方案下的install文件夹里就有了dll,lib和h头文件了。
4. 虽然生成了库文件了,如果可以Debug跟踪源码,还得保留OpenCV解决方案
重新配置环境
注意的一点是,我一开始用的是官网opencv3.0的包,在
上篇blog[http://www.cnblogs.com/france/p/4853706.html] 已经讲解了如何配置开发环境了,或者参考http://blog.csdn.net/poem_qianmo/article/details/19809337
那么这里要注意的是
- Path重新配置,然后记得重启
- VS property pages 中
VC++ Directories 的include Directories(.hpp存放地) 改成如下(就是换了地址)
D:\opencv3\opencv\build\install\include\opencv2;
D:\opencv3\opencv\build\install\include\opencv;
D:\opencv3\opencv\build\install\include;
Library Directories(lib存放地) 更改地址 D:\opencv3\opencv\build\install\x86\vc12\lib
- Linker Input中修改为如下:
opencv_imgproc300d.lib;
opencv_imgcodecs300d.lib;
opencv_highgui300d.lib;
opencv_features2d300d.lib;
opencv_core300d.lib;
kernel32.lib;user32.lib;
opencv_xfeatures2d300d.lib;
opencv_ts300d.lib;
gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
具体的lib文件名,可在D:\opencv3\opencv\build\install\x86\vc12\lib 中找到,不一样要全部都加进去(当然都加进去最好,我这里只加了一些我比较会用到的lib),300表示3.00版本,+d表示debug否则为release版本,
而在原来我们官网下的opencv3.0基本版只要加opencv_ts300d.lib;和opencv_world300d.lib;但是我们自己编译完发现opencv_world300d.lib;已经舍弃了,换成各种各样详细的包了,和2.x的加的lib个数差不多,因为是完整版本了。
PS:如果在写代码和编译的时候没有提示错误,说明hpp文件和lib引用是存在的,但是在链接和运行的时候报错说没有找到相应的方法,就是没有配置上面具体lib,动态链接的时候出错
PS2:CSDN的markdown炒鸡好用,博客园要加油了
参考:
http://www.nmtree.net/2014/03/19/windows_build-opencv-with-cmake-and-vs2013.html
http://blog.csdn.net/poem_qianmo/article/details/21974023
http://blog.csdn.net/poem_qianmo/article/details/19809337
【OpenCV入门教程之二】OPENCV3 开源之美 — 编译源代码、配置opencv_contrib的更多相关文章
- 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8组件结构全解析
转自: http://blog.csdn.net/poem_qianmo/article/details/19925819 本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:ht ...
- 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/19925819 作者:毛星云 ...
- 系列文章 -- OpenCV入门教程
<OpenCV3编程入门>内容简介&勘误&配套源代码下载 [OpenCV入门教程之十八]OpenCV仿射变换 & SURF特征点描述合辑 [OpenCV入门教程之 ...
- [OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
http://blog.csdn.net/poem_qianmo/article/details/25560901 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog ...
- 【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析(转)
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/20537737 作者:毛星云(浅墨) ...
- opencv ,亮度调整【【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整
http://blog.csdn.net/poem_qianmo/article/details/21479533 [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调 ...
- 【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
http://blog.csdn.net/poem_qianmo/article/details/26977557 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog ...
- WPF入门教程系列二十三——DataGrid示例(三)
DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...
- WCF入门教程(二)如何创建WCF服务
WCF入门教程(二)从零做起-创建WCF服务 通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) ...
随机推荐
- 由fdopen和fopen想到的
ISO C并没有规定fdopen,而是POSIX的补充. FILE *fopen(const char *path, const char *mode); FILE *fdopen(int fd, c ...
- Canvas修行之黑客帝国代码雨
既然是修行,不卖弄关子,不吊胃口,修行成果必须先晒一晒. 下图是我用canvas画的黑客帝国代码雨,想起当年看黑客帝国时,那个代码雨场景让我心旷神怡,大开脑洞,满脑子是那种三维空间,无数0和1像雨一样 ...
- [转]highcharts图表入门之:如何让highcharts图表自适应浏览器窗体的大小或者页面大小
本文转自: http://jsfiddle.net/vCZ8V/1/ http://www.stepday.com/topic/?740 http://blog.csdn.net/yueritian/ ...
- Bellman-Ford算法解决单源最短路问题
#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define max 100 #define I ...
- A + B Problem II
之前总是在查阅别人的文档,看着其他人的博客,自己心里总有一份冲动,想记录一下自己学习的经历.学习算法有一段时间了,于是想从算法开始自己的博客生涯O(∩_∩)O~~ 今天在网上看了一道大数相加(高精度) ...
- 译文 对无障碍网页应用(ARIA)的选择
//本文编辑格式为Markdown,译文同时发布在众成翻译 对无障碍网页应用(ARIA)的选择 让网站对每个人都能访问是一件相当艰难的工作,尤其是在我们使用自定义标记解决方案(custom marku ...
- AOJ 740 求和
链接:http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=740 Description 对于正整数n,k,我们定义这样一个函数f,它满足如下规律f(n,k=1 ...
- js计算系统当前日期是星期几的几种方法
方法一: // 计算系统当前是星期几 var str = "今天是星期" + "日一二三四五六".charat(new date().getday()); 方法 ...
- 第16章 Windows线程栈
16.1 线程栈及工作原理 (1)线程栈简介 ①系统在创建线程时,会为线程预订一块地址空间(即每个线程私有的栈空间),并调拨一些物理存储器.默认情况下,预订1MB的地址空间并调拨两个页面的存储器. ② ...
- java 20 - 6 加入了异常处理的字节输出流的操作
昨天坐了十几个钟的车回家,累弊了.... ————————————割掉疲劳————————————— 前面的字节输出流都是抛出了异常不管,这次的加入了异常处理: 首先还是创建一个字节输出流对象,先给它 ...