玩转OpenCV源代码:生成OpenCV工程解决方案与OpenCV源码编译

来源:互联网 发布:mysql replace 并发 编辑:程序博客网 时间:2024/05/17 02:11

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

文章链接: 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:\ProgramFiles\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的源码近眼前,不虚此生地欣赏它吧。

 


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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 割完双眼皮第五天了很痒怎么办 自体脂肪丰胸做完半年有团块怎么办 假体隆胸一个月了躺着睡很硬怎么办 假体隆胸半月俩胸大小不一样怎么办 假体隆胸拆线后还是起不来床怎么办 假体隆胸术后6天 天天胀痛怎么办 阴部大腿根长了个疙瘩有点痛怎么办 加盟费交了总部不做事怎么办 仓鼠从桌子摔下来后走路别扭怎么办 习惯了一个人天天找你聊天怎么办 来完月经外阴湿疹就严重怎么办 宝宝不肯喝开水尿黄黄的怎么办 做阴超做一半发现忘记换套了怎么办 穿裙子时拉链总往下掉怎么办 子宫内膜厚姨妈来的久怎么办 胸小胸罩往上跑肩带往两边掉怎么办 白衣服弄上姨妈血了洗了变黄怎么办 货物丢失了我感觉没丢这么多怎么办 想穿短裙 但是膝盖怕凉怎么办 被老公看到内裤很脏还有屎怎么办 排卵期同房了不知道怀没怀孕怎么办 清理空调时湿纸巾被卷进去怎么办 超市买的尿不湿质量太差怎么办 把卫生巾和衣服一起洗了怎么办 全面屏面对vo华为手机怎么办屏 雅漾喷雾的喷头坏了怎么办 悦诗风吟水里面有小颗粒怎么办 林肯mkz钥匙锁在车内怎么办 八四消毒液弄到衣服上怎么办 微信朋友圈发过的文章想修改怎么办 白色衣服被洗衣液染色了怎么办 准迁证和迁移证不想迁了怎么办 出了迁移证又想迁到其他地方怎么办 高中的会考如果没g合格怎么办 鞋子里自带的鞋垫坏了怎么办 入厕纸把私处伤了一下怎么办? 夏天做月子用姨妈巾热怎么办 涂了痔疮膏后怕粘到内裤怎么办 眼罩里面的蓝色液体干了怎么办 新买的饮水机有塑料味怎么办 白色衣服被洗衣液染荧光了怎么办