本系列文章由@浅墨_毛星云 出品,转载请注明出处。

文章链接: http://blog.csdn.net/poem_qianmo/article/details/21974023

作者:毛星云(浅墨)    邮箱: happylifemxy@163.com

写作当前博文时配套使用的OpenCV版本: 2.4.8

这篇文章中,我们一起探讨了如何通过已经安装的OpenCV,选择不同的编译器类型,生成高度还原的OpenCV开发时的解决方案工程文件,欣赏OpenCV新版本中总计 六十六多万行的精妙源代码。我们可以对其源代码进行再次编译,得到二进制文件,或者修改原版官方的OpenCV代码,并编译后为自己所用,为深入理解OpenCV的开源魅力迈出了坚实的一步。

一、下载安装cmake

想要在Windows平台下生成OpenCV的解决方案,我们需要一个名为cmake的开源软件,可以在

camke的官网:http://www.cmake.org/上下载到,首先转到其下载页面。下载页面的Source distributions处可以下载到cmake软件的源码,如果对这款开源软件感兴趣,不妨看看。

而Binary distributions处可以下载到cmake的执行文件,我们只需要下载到其执行文件即可,选择Windows (Win32 Installer)进行下载,点击这里直接下载:http://www.cmake.org/files/v2.8/cmake-2.8.12.2-win32-x86.exe

这一步就是下载和安装cmake,下载地址给出了,安装大家都会,就不过多讲。安装完成后,

如果没有生成桌面快捷方式,在安装路径下,如D:\Program Files(x86)\CMake 2.8\bin处找到cmake-gui.exe运行。

另外,关于cmake的一个简介:

CMake,是“crossplatform make”的缩写,它是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是CMake 和 SCons 等其他类似系统的区别之处。

二、使用cmake生成OpenCV源代码工程的解决方案

这一步是全文的核心内容。为了讲解条理清晰,我们分步介绍:

<1>运行cmake-gui

如果没有生成桌面快捷方式,在安装路径下,如D:\Program Files(x86)\CMake 2.8\bin处找到cmake-gui.exe运行。

运行后得到如下的窗口:

<2>指定OpenCV的安装路径

如下图,点击红色方框内的“Browse Source”按钮,在弹出的对话框中指定出OpenCV安装时源代码的存储路径。

以当前最新版本的OpenCV 2.4.8安装在D:\Program Files下为例,则在此选择路径:D:\Program Files\opencv\sources

其实我们可以发现,此路径下必须会有一个名为CMakeLists.txt的文件。

这个文件就是给cmake留下的配置文件,cmake可以根据这个配置文件,通过不同的编译器选择,来生成不同的解决方案,VisualStudio的编译器对应的就生成Visual Studio版的sln解决方案。

<3>指定解决方案的存放路径

如下图,点击红色方框内的“Browse Build”按钮,在弹出的对话框中指定我们存放生成的opencv解决方案的路径。比如F:/opencv。

<4>第一次Configure

如图,第一次点击Configure按钮。

会弹出如下进行编译器选择的对话框:

首先选定“Use default native compilers”,然后,我们可以发现下拉列表中提供了几十种编译器给我们选择,因为我们安装了Visual Studio,会默认为我们选择好对应版本的Visual Studio编译器,比如Visual Studio 10(即待会儿会生成对应VS2010的sln解决方案)

确认无误后,单击“finish”按钮。

于是,cmake开始第一次源代码配置过程:

在cmake处理的过程中,也许会出现诸如

“Could not copy from: D:/Program Files(x86)/CMake 2.8/share/cmake 2.8/Templates/CMakeVSMacros2.vsmacros

to: C:/Users/浅墨/Documents/VisualStudio 2010/Projects/VSMacros80/CMakeMacros/CMakeVSMacros2.vsmacros”

的红色字样警告,因为这是系统用户的路径名有中文字符 “浅墨”照成的,因为cmake不认中文路径,但是只要我们在上面的第三步中设置生成的路径中没有中文就行了。就算有这个因为C:/Users/下有中文照成的错误,也对我们这次的生成无碍,不用去管他。

PS:关于系统用户名为中文,这是血的教训。之前在玩Unity3D游戏引擎的时候,被系统路径为中文虐了好一阵子,在unity官方商店下个插件就报错。在控制面板中更改用户名是治标不治本的办法,最后把系统user的Documents目录定位到别的地方才解决。不过这会造成一些在Documents路径下存了数据的软件数据丢失,甚至打不开。。。。。所以,血的教训。。。。浅墨在以后重装系统的时候,绝对不会以中文ID作为用户名了。

看到进度条读到尽头,出现了Configuring done字样,第一次的源码配置就完成了,如图

<5>第二次Configure

第一次配置完成之后,我们还需要进行第二次配置,于是再次点击“Configure”按钮。这次的配置是很快的,几秒钟就会再次出现“Configuring done”字样,并且红色的选中部分都正常了:

<6>点击Generate,大功告成

这样,就只剩下点一次Generate按钮,来生成最终的解决方案了:

因为之前已经有过两次的configure过程,所以生成解决方案也将是非常的快:

看到Generating done字样,就表示大功告成,可以去之前我们指定的F:\opencv下找寻我们生成的解决方案了。

PS:2.4.8的OpenCV用cmake生成的工程只有3点多M,相比之前2.4.6版本的OpenCV有3个多G的工程,浅墨一开始都以为生成出错了,但是点开sln工程,发现里面依然可以看到源代码。原来自从2.4.7版本起,opencv源代码就直接包含在了opencv的安装路径下,我们生成的sln工程,也只是连接到了opencv安装路径下的源文件而已,工程本身并不大。

三、编译OpenCV源代码

我们怀着忐忑的心态打开刚刚生成的热乎乎的“OpenCV.sln”解决方案,看到一个庞大的工程映入眼帘——这可是一个包含了67个项目的解决方案:

大家这个时候可以在解决方案资源管理界面,随意地点进去一个自己感兴趣的项目,比如opencv_core这个项目,在opencv_core/Src/matrix.cpp查看其中某个文件的源代码,浅墨截的这张图是大家都很熟悉的Mat类型的某个构造函数的源码:

一阵对源代码的欣赏之后,我们可以按【F5】或者使用其他各种操作来启动调试

编译过程:

编译结果:

编译用时5分钟左右,具体时间和机器配置关系比较大。通过浅墨的截图可以发现,这次编译成功了62个项目,失败了0,即没有出篓子,全部编译生成成功了。:D

另外,编译完成会得到这样的警告:

别紧张,这是正常的。因为OpenCV2.4.8的源代码工程默认将“ALL_BUILD”这个项目其设为了启动项,编译成功后,就会默认运行它。

而“ALL_BUILD”是一个项目生成周边的杂项,不是exe,本身不可以运行,所以就会弹出这样的提示。

关于启动项的指定,我们可以在解决方案资源管理器里面,对需要设为启动项的那个项目反键点击,在弹出的菜单项中点击【设为启动项(J)】进行设定。如下图:

其实我们编译OpenCV,就是得到了一些二进制的生成文件,如DLL和Lib、exe。

因为我们是在debug下编译的,所以在工程目录的bin\debug下会生成opencv 2.4.8的依赖库(700多M,有点大),可以供我们以后调用opencv时使用。

四、OpenCV代码行数统计

OpenCV到了2.4时代,源代码src部分已经有了170多M,而源代码行数,通过浅墨的统计,是68多万行。(这里浅墨不禁有些感慨,前两天刚在捣鼓的Unreal Engine 4的源码是144多万行,是OpenCV的两倍多。。。。)

可以看到,准确的OpenCV 2.4.8的源代码,有687,870行。

OK,盛宴开始,计算机视觉领域的大宝库——OpenCV的源码近眼前,不虚此生地欣赏它吧。

嗯,本节的内容大概就是这些,我们下篇文章见:)

【OpenCV入门教程之七】 玩转OpenCV源代码:生成OpenCV工程解决方案与OpenCV源码编译相关推荐

  1. 【转】【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/19809337 作者:毛星云(浅 ...

  2. 转载:【opencv入门教程之一】:配置

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/19809337 作者:毛星云(浅 ...

  3. 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/19809337 作者:毛星云(浅 ...

  4. 【OpenCV入门教程之一】 安装OpenCV OpenCV 3 0 OpenCV 2 4 8 OpenCV 2 4 9

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴!  本系列 ...

  5. 【OpenCV入门教程之一】 安装OpenCV

    知乎:http://www.zhihu.com/people/mao-xing-yun 写作当前博文时配套使用的OpenCV版本: 2.4.8.24.9.3.0 ( 2014年4月28更新OpenCV ...

  6. 【OpenCV入门教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

  7. 【OpenCV入门教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/23184547 作者:毛星云(浅墨) ...

  8. 【OpenCV入门教程之十七】OpenCV重映射 SURF特征点检测合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨) ...

  9. 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/23710721 作者:毛星云(浅墨) ...

最新文章

  1. openssl C函数总结,
  2. python环境变量配置_21 python环境的配置
  3. 容器内存释放问题(STL新手笔记)
  4. 20.IDA-修改二进制文件、显示修改点
  5. 基于决策树的多分类_R中基于决策树的糖尿病分类—一个零博客
  6. C++ STL list添加(插入)元素方法详解
  7. CSS选择器的权重详解
  8. iOS多线程系列之GCD栅栏(barrier)实现同步锁
  9. ftp://hxtech.com
  10. 商标注册流程与注意事项
  11. CentOS6.5上增加中文字体库,确保前端WEB可以正常显示
  12. hashmap和hashtable,arraylist和vector的区别
  13. Android 根据手机自带GPS获取当前位置,经纬度
  14. 如何利用抖加实现精准引流?3种玩法,愿你别再花冤枉钱了?(五)
  15. 在n*n方阵里填入1,2,...n*n,要求填成蛇形
  16. 智遥工作流是如何模拟并优化办公单据审批的
  17. 【算法学习笔记07】贪心算法(Greedy Algorithm)
  18. 请控制好你的情绪--职场情绪管理
  19. 【计算机体系结构-01】指令集体系结构、微体系结构简介
  20. 录屏的知识片段的记录与理解

热门文章

  1. 仿9158 VC++视频聊天室源码
  2. MobaXterm登录堡垒机/跳板机
  3. 前世的五百次回眸才能换得今生的一次擦肩而过
  4. html静态网站基于动漫网站网页设计与实现共计4个页面
  5. 用来绕制无线充线圈的线材有哪些
  6. 微信小程序之记事本管理系统(含源码+论文+答辩PPT等)
  7. cir模型matlab代码,CIR模型
  8. 记忆方法与快速阅读——最基础的快速阅读
  9. 天线理论知识2——宽带天线介绍
  10. 红石外汇|每日汇评:在美国CPI之前,英镑多头仍保持对近一年高点的控制