下载并安装CMake3.0.1

     

要自己编译OpenCV2.4.9的源代码。首先。必须下载编译工具,使用的比較多的编译工具是CMake。

以下摘录一段关于CMake的介绍:

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描写叙述全部平台的安装(编译过程)。他可以输出各种各样的makefile或者project文件,能測试编译器所支持的C 特性,类似UNIX下的automake。仅仅是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出终于的软件,而是产生标准的建构档(如
Unix 的 Makefile 或 Windows Visual C 的 projects/workspaces),然后再依一般的建构方式使用。

这使得熟悉某个集成开发环境(IDE)的开发人员能够用标准的方式建构他的软件。这样的能够使用各平台的原生建构系统的能力是 CMake 和 SCons 等其它类似系统的差别之处。

CMake 能够编译源码、制作程式库、产生适配器(wrapper)、还能够用随意的顺序建构运行档。CMake 支援 in-place 建构(二进档和源码在同一个文件夹树中)和 out-of-place 建构(二进档在别的文件夹里),因此能够非常easy从同一个源码文件夹树中建构出多个二进档。

CMake 也支持静态与动态程式库的建构。

“CMake”这个名字是“Cross Platform Make”的缩写。

尽管名字中含有“make”,可是CMake和Unix上常见的“make”系统是分开的,并且更为高阶。

通过以上介绍我们知道,我们能够用CMake这个工具将源代码编译成VS2010的project文件,使得我们能够在VS下以不同项目组的形式构建多个例子或者教程project。

我们能够在CMake的官网: http://www.cmake.org/cmake/resources/software.html上找到最新版本号的CMake安装文件。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

选择文件“CMake-3.0.1-win32-x86.exe”下载,一共10.78MB,非常快能够下完。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

下载完毕后,双击安装程序,就可以開始CMake的安装。

安装非常easy,基本上就是“下一步”,直至最后一步“完毕”。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

安装完毕后。能够在“開始”菜单中找到已经安装好的CMake3.0.1程序的快捷方式"CMake (cmake-gui)"

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

安装好了以后。以下開始进行OpenCV源代码的编译。

OpenCV2.4.9源代码编译


这里如果我们已经将OpenCV2.4.9的源代码下载而且安装好了。

(如果这一步不知道怎么做。请參看本人还有一个教程《学习OpenCV的学习笔记系列(一)环境配置》)

在“開始”菜单中点击“CMake (cmake-gui)”,打开CMake程序,此时将弹出编译设置界面。例如以下图所看到的

在"Where is the source code"选项的文本框中输入OpenCV源代码所在的文件夹路径,能够点击"Browse Source..."选择文件夹,请依据源代码安装的实际位置选择路径,此处选择的是"H:/opencv/sources"。

在"Where to build the binaries"选项的文本框中输入须要构建例子project及源代码的文件文件夹路径,此处选择的是与源代码同一文件夹下的"H:/OpenCV/Solution"。

输入完源代码路径及生成路径之后,点击编译设置界面左下角的"Configure"button

假设是第一次配置。那么将会弹出一个选择生成project目标环境的界面,此处选择“Visual Studio 10 2010”选项,勾选"Use default native compilers"。然后点击"Finish"button。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

假设生成目标文件夹路径不存在。那么会有一个提示新建文件夹的对话框,例如以下图所看到的,直接点"Yes"就可以。

第一次配置会出现非常多红色的选项,别管它。再点击一次"Configure"button。

这一次,红色选项没有了,说明没有问题了。配置完毕。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

点击"Generate"button

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

在看到最下方有"Generating done"字样后。说明源代码project编译完成。

OpenCV2.4.9源代码project測试

      

打开上一步设置的生成目录路径下的目录,可见有一个"Solution"目录,这个是上一步设置中自己主动生成的,双击该目录。

在"H:/opencv/Solution"路径下。我们能够看到有一个已经编译生成好了的VS2010project文件"OpenCV.sln",双击该文件。既能够在VS2010中打开该project文件。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

在打开的"OpenCV"project中,我们能够看到有68个项目。

右键点击OpenCV解决方式,选择生成解决方式。

编译用时较长。我的PC配置算是比較好的,可是编译也一共耗时约2分钟左右。生成62个project,失败0个,说明所有编译通过。

恭喜自己一下!

接下来,就能够逐个project去查看。编译了。关于这些例子project及源代码的解释,兴许将补充。。

OpenCV2.4.9自带例子源代码编译及測试

     

以上介绍的是OpenCV的源代码编译及project,以下介绍怎么编译OpenCV自带的例子源代码及project。

熟门熟路地打开CMake3.0.1,将源代码路径改为:"H:/opencv/sources/samples"(详细路径随安装位置而不同。在opencv的源代码安装文件夹下能够找到“sample”文件夹)。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

在一通配置(Configure)及生成(Generate)后(配置项同上。此处不赘述!

),在目标文件夹下。能够找到已经生成好了的OpenCV的例子project文件:“samples.sln

点击打开"samples.sln",看到解决方式资源管理器中显示一共同拥有172个项目(例子真多,好好看哈!

右键点击解决方式,选择“生成解决方式

大概一分钟左右(不同机器配置,编译时间有区别)。编译完毕,project生成171个project,失败0个,一次编译通过。点个赞。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

总体编译无误后,随手打开一个例子project,本文选择“(EXAMPLE) lkdemo”project。此project源代码使用改进的Lucas-Kanade光流算法,用于检測视频运动目标。用鼠标点击目标点,可视频跟踪。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

点击执行。发现一个命令行界面一闪而过。之后就退出了,这是为什么呢?

通过单步执行调试发现,在“lkdemo.cpp”文件的56行的"if( !cap.isOpened() );"推断语句中,播放器没有打开,直接在控制台显示一行“Could
not initialize capturing...
”就退出了。

分析其原因。是由于“cap.open("Megamind.avi");”这个语句中的视频文件“Megamind.avi”不在程序文件夹下。知道原因。就好攻克了。

在“H:\opencv\sources\samples\cpp”文件夹下(源代码文件文件夹)拷贝“Megamind.avi”文件至“H:\opencv\sampleSolution\cpp\Debug”文件夹下(此乃程序“cpp-example-lkdemo.exe”所在文件夹)。

换句话说,就是要确保在程序执行的文件夹下有“Megamind.avi”文件就可以。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

在做完以上工作后。再次点击执行,就成功执行了,播放的是一个动画片,在画面的一处点击左键后,会有一个绿色的标记点,该标记点的位置会随着周围物体的运动而改变,这应该就是所谓的视频跟踪了。

截图例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVzdGdvbmdodWliaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

OK,这当中的原理及工作流程我就不介绍了,自己看源代码,其它例子project的源代码能够一个个去看,然后编译执行。相信将这些例子都熟悉理解摸透后,OpenCV对你将不再陌生。欢迎你步入OpenCV的殿堂。開始你的学习阶段吧!

学习OpenCV研究报告指出系列(二)源代码被编译并配有实例project的更多相关文章

  1. 得知OpenCV研究报告指出系列(一)VS2010+OpenCV2.4.9环境配置

    学习OpenCV,首先,当然,要知道如何配置的环境. 余系统的软件和硬件环境,如以下: 以本人的配置环境为例,配置过程例如以下. 第一步 下载及解压OpenCV源代码 尽管非常多第三方站点及一些学习论 ...

  2. 手牵手,从零学习Vue源码 系列二(变化侦测篇)

    系列文章: 手牵手,从零学习Vue源码 系列一(前言-目录篇) 手牵手,从零学习Vue源码 系列二(变化侦测篇) 陆续更新中... 预计八月中旬更新完毕. 1 概述 Vue最大的特点之一就是数据驱动视 ...

  3. 学习OpenCV:滤镜系列(15)——羽化(模糊边缘)

    ============================================== 版权所有:小熊不去实验室CSDN博客 ================================== ...

  4. 高反差保留滤镜学习OpenCV:滤镜系列(11)——高反差保留

    这几周笔者几篇文章介绍了改高反差保留滤镜的文章. 关联文章的地址 高反差保留就是高通滤波 r=(pix[x,y]-avg(R))/128 pix[x,y]*r+128*(1-r) #include & ...

  5. 系统学习java高并发系列二

    转载请注明原创出处,谢谢! 什么是线程? 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程 ...

  6. 手牵手,从零学习Vue源码 系列一(前言-目录篇)

    系列文章: 手牵手,从零学习Vue源码 系列一(前言-目录篇) 手牵手,从零学习Vue源码 系列二(变化侦测篇) 手牵手,从零学习Vue源码 系列三(虚拟DOM篇) 陆续更新中... 预计八月中旬更新 ...

  7. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  8. 图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

    项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4990947?contributionType=1 欢迎fork欢迎三连!文章篇幅有限, ...

  9. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

随机推荐

  1. 当数据库没有备份,redo或undo损坏

    数据库在没有备份的情况下,如果数据库redo或undo损坏,可以通过如下方法处理,但是不一定成功 把init文件中的: undo_management=manual 然后启动数据库到mount 状态后 ...

  2. Javascript和jquery事件--鼠标事件的小结

    1.鼠标事件的主要事件应该是mouseup, mousedown, mousewheel, mousemove, mouseover, moveout. <1>其中mouseup和mous ...

  3. 驱动学习3-make

    在向内核中添加驱动的时候要完成3项工作 (1)在Kconfig中添加新代码对应项目的编译条件(下面Makefile文件中需要用到它定义的的宏变量) (2)将驱动源码添加到对应的目录中 (3)在目录Ma ...

  4. [Angular] New async 'as' syntax and ngIf.. else

    From Anuglar v4 above, we are able to using 'as' with async pipe. This allow as using 'new variable' ...

  5. 使用docker 搭建基础的 mysql 应用

    mysql server是眼下比較流行的开源数据库server.以下介绍怎样使用docker来做一个mysql数据库服务 从站点直接 pull 一个 mysql 的镜像 core@localhost ...

  6. 支付宝支付返回通知时 notify_url和return_url的选择

    页面跳转同步通知页面特性(return_url特性) 买家在支付成功后会看到一个支付宝交易提示成功的页面,该页面会停留几秒,然后会自动跳转回商户指定的同步通知页面(参数return_url) 该页面中 ...

  7. C语言中 / 得到的结果

  8. 常用MVC框架

    J2EE开常用的SSH或SSI框架,对应解决表示层.业务逻辑层.持久化层的问题,其中对表示层的解决方案最多,常见的有Struts1/2,Spring MVC等,实际上都是在最底层的Servlet规范中 ...

  9. 15、NAND FLASH驱动程序框架

    驱动可以参考At91_nand.c,这个比S3c2410.c (drivers\mtd\nand)简单多了 NAND FLASH是一个存储芯片那么: 这样的操作很合理"读地址A的数据,把数据 ...

  10. ocx中用自定义消息去调用自定义事件

    硬件发送消息---->接收到消息后调用回调函数DWORD __stdcall CxxxCtrl::FVI_NotifyCallBack(void *FVINOTIFYCallbackCtx,UI ...