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

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

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

========================================================================================================

上面为Windows上配置,以下为Ubuntu中OpenCV编译及配置:

1. 安装相关软件包:

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev libtiff4-dev cmake libswscale-dev libjasper-dev

2. cmake:

新建文件夹release -> cd release -> cmake -D CMAKE_BUILD_TYPE=DEBUG <OpenCV_SourceCode_Path>

3. make & make install

4. 配置library:

打开/etc/ld.so.conf.d/opencv.conf,在末尾加入/usr/local/lib (有可能是个空文件,没关系)

sudo ldconfig -> 编辑/etc/bash.bashrc -> 加入下面内容:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
5. 安装完成,测试下安装成果:
将opencv源码包下的example/c拷贝出来,执行./build_all.sh
编译完后试一个人脸检测的程序:
./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值