zoukankan      html  css  js  c++  java
  • 【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.8in处找到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.8in处找到cmake-gui.exe运行。

    运行后得到如下的窗口:

    <2>指定OpenCV的安装路径

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

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

    其实我们可以发现,此路径下必须会有一个名为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下编译的,所以在工程目录的bindebug下会生成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的源码近眼前,不虚此生地欣赏它吧。

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

  • 相关阅读:
    WAS日常维护中的重启时机——总结
    利用Shell生成Zabbix监控的数字报表
    Zabbix version upgrade (1.8.3 to 1.8.12)
    xeyes命令
    centos系统调节屏幕亮度
    centos7 安装kchmviewer 软件
    ftp使用FileZilla工具传输文件
    搭建vsftpd服务并实现本地用户访问
    centos中创建服务和关闭防火墙的基本命令
    阿里云vsftpd登录失败:530 Permission Denied.
  • 原文地址:https://www.cnblogs.com/wobuchouyan/p/5059139.html
Copyright © 2011-2022 走看看