您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > CMake编译Opencv自带源码及程序形成工程并运行教程
1CMake编译Opencv自带源码及程序形成工程并运行教程本教程基于,感谢网友的贡献,本教程首先回顾一下网友的教程,重点在于解决网友没有提到的各种问题(第5章),因此前四章,大家也可以看原网址上提供的内容。声明:纯粹经验之谈,重点是解决问题,若有理解错误,请多包涵~~一直很想直接打开运行opencv自带的示例程序,或者看看里面一些函数的源码,奈何opencv库里面给出的都是源文件,直接打开不能运行,没有编译形成VS中的工程方案,所以要看时,只得自己新建工程,然后复制过去,先不说麻烦,就算真弄过去了,还不一定能运行,因为它还可能有依赖项什么的问题(猜的),总之不一定能够顺利运行。后来听说可以用CMake对其进行编译,可以形成VS中的工程方案,然后直接就可以打开运行了,这当然方便多了,于是就有了下面的东西~~~1下载及安装CMake在写本教程的时候,CMake最新版本为CMake3.4.1,下载网址为:,CMake有很多的发行版本,具体有哪些,作为一个小白,也不懂什么,只是知道其中有分source和binary两种版本,前面的那个版本貌似是对应源码版本,也就是给的是CMake的源码,如果我们要用它去编译其他如opencv的源码,那得先编译CMake的source文件,然后还要写CMakeList.txt(相当于是通过编程来实现编译其他文件,本人这么理解,若有误,莫怪~),这么复杂,对我来说,肯定不想要;因此,我选择了binary版本(直接是二进制文件,已经编译好了,并形成了可执行程序),下载之后是一个.exe文件,这个就好办多了,下载下来,点击运行一顿安装就可以了~~~开始进入正题~~~下面摘录一段关于CMake的介绍(摘自教程开头的网址):CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C特性,类似UNIX下的automake。只是CMake的组态档取名为CmakeLists.txt。Cmake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或WindowsVisualC的projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是CMake2和SCons等其他类似系统的区别之处。CMake可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake支援in-place建构(二进档和源代码在同一个目录树中)和out-of-place建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake也支持静态与动态程式库的建构。“CMake”这个名字是“CrossPlatformMake”的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。通过以上介绍我们知道,我们可以用CMake这个工具将源码编译成VS2010的工程文件,使得我们可以在VS下以不同项目组的形式构建多个样例或者教程工程。我们可以在CMake的官网:上找到最新版本的CMake安装文件。至于为什么选择的是win32-x86.exe,很多人也许有疑惑,我明明是x64的3电脑,怎么选择这个呢,其实我也不太懂,这里只能鼓起勇气说几句,如果我们稍微留意点的话,会发现,我们经常建立的.cpp程序都是win32(x86)控制台应用程序是吧,我一直纳闷,为什么是这个呢?我想可能是编译器是对应这个型号的吧,这玩意好像一直到VS2013都是只有win32(x86)对应的编译器,但到了VS2015,就不一样了,即有win32对应的编译器,还有x64对应的编译器(也即向前兼容),嗯,我只能说这么多了,而且还不知道对不对,总之,本教程只是经验之谈,涉及到的理论部分,纯粹是为了补补边,大家觉得正确就接受,有错误的话,请原谅~~选择文件“CMake-3.0.1-win32-x86.exe”下载,一共10.78MB,很快可以下完。下载完成后,双击安装程序,即可开始CMake的安装。安装很简单,基本上就是“下一步”,直至最后一步“完成”。456我的习惯,肯定要创建桌面快捷方式了,这样方便啊~~当然可能不经常用,那也可以随时删~~~发现上面这个图没有,CMake好强大,自动识别并列出你有的一些程序,当然有你的VS了~~~7安装完成后,可以在“开始”菜单中找到已经安装好的CMake3.0.1程序的快捷方式CMake(cmake-gui)。当然,之前已经有选择创建快捷方式,安装之后,桌面上就有快捷方式。8安装好了以后,下面开始进行OpenCV源码的编译。2OpenCV2.4.9源码编译这里假设我们已经将OpenCV2.4.9的源码下载并且安装好了。(如果这一步不知道怎么做,请参看本人另一个教程《学习OpenCV的学习笔记系列(一)环境配置》)。(这是原网友的话,我之前也写过一个关于各Opencv与各版本VS配置的教程,可以在百度文库搜索《OpenCV在VisualStudio中的属性表配置方法(通用)》),如下图示。9在“开始”菜单中点击“CMake(cmake-gui)”,打开CMake程序,此时将弹出编译设置界面。如下图所示。在Whereisthesourcecode选项的文本框中输入OpenCV源码所在的目录路径(opencv文件提取的位置),可以点击BrowseSource…选择文件夹,请根据源码安装的实际位置选择路径,此处选择的是H:/opencv/sources。10在Wheretobuildthebinaries选项的文本框中输入需要构建样例工程及源码的文件目录路径,此处选择的是与源码同一文件夹下的H:/OpenCV/Solution。输入完源码路径及生成路径之后,点击编译设置界面左下角的Configure按钮。如果是第一次配置,那么将会弹出一个选择生成工程目标环境的界面,此处选择“VisualStudio102010”选项,勾选Usedefaultnativecompilers,然后点击Finish按钮。因为我使用的是VS2010,而且与opencv配置的也只有VS2010。11如果生成目标目录路径不存在,那么会有一个提示新建目录的对话框,如下图所示,直接点Yes即可。第一次配置会出现很多红色的选项,别管它,再点击一次Configure按钮。这一次,红色选项没有了,说明没有问题了,配置完成。12点击Generate按钮13在看到最下方有Generatingdone字样后,说明源码工程编译完毕。3OpenCV2.4.9源码工程测试打开上一步设置的生成目录路径下的文件夹,可见有一个Solution文件夹,这个是上一步设置中自动生成的,双击该文件夹。14在H:/opencv/Solution路径下,我们可以看到有一个已经编译生成好了的VS2010工程文件OpenCV.sln,双击该文件,既可以在VS2010中打开该工程文件。15在打开的OpenCV工程中,我们可以看到有68个项目。右键点击OpenCV解决方案,选择生成解决方案。16编译用时较长,我的PC配置算是比较好的,但是编译也一共耗时约2分钟左右,生成62个工程,失败0个,说明全部编译通过。恭喜自己一下!17接下来,就可以逐个工程去查看,编译了。关于这些样例工程及源码的解释,后续将补充。。。(这话是原作者说的~~不是我说的啊~~)4OpenCV2.4.9自带样例源码编译及测试以上介绍的是OpenCV的源码编译及工程,下面介绍怎么编译OpenCV自带的样例源码及工程。熟门熟路地打开CMake3.0.1,将源码路径改为:H:/opencv/sources/samples(具体路径随安装位置而不同,在opencv的源码安装目录下可以找到“sample”文件夹)。18192021在一通配置(Configure)及生成(Generate)后(配置项同上,此处不赘述!),在目标目录下,可以找到已经生成好了的OpenCV的样例工程文件:“samples.sln”22点击打开samples.sln,看到解决方案资源管理器中显示一共有172个项目(样例真多,好好看哈!)右键点击解决方案,选择“生成解决方案”大概一分钟左右(不同机器配置,编译时间有差别),编译完成,工程生成171个工程,失败0个,一次编译通过,点个赞!23整体编译无误后,随手打开一个样例工程,本文选择“(EXAMPLE)lkdemo”工程。此工程源码使用改进的Lucas-Kanade光流算法,用于检测视频运动目标。用鼠标点击目标点,可视频跟踪。点击运行,发现一个命令行界面一闪而过,之后就退出了,这是为什么呢?24通过单步运行调试发现,在“lkdemo.cpp”文件的56行的if(!cap.isOpened());判断语句中,播放器没有打开,直接在控制台显示一行“Couldnotinitializecapturing…”就退出了。分析其原因,是因为“cap.open(Megamind.avi);”这个语句中的视频文件“Megamind.avi”不在程序目录下。知道原因,就好解决了!在“H:\opencv\sources\samples\cpp”目录下(源码文件目录)拷贝“Megamind.avi”文件至“H:\opencv\sampleSolution\cpp\Debug”目录下(此乃程序“cpp-example-lkdemo.exe”所在目录)。换句话说,就是要确保在程序运行的目录下有“Megamind.avi”文件即可。25在做完以上工作后,再次点击运行,就成功运行了,播放的是一个动画片,在画面的一处点击左键后,会有一个绿色的标记点,该标记点的位置会随着周围物体的运动而改变,这应该就是所谓的视频跟踪了。截图如下:26OK,这其中的原理及工作流程我就不介绍了,自己看源码,其他样例工程的源码可以一个个去看,然后编译运行,相信将这些样例都熟悉理解摸透后,OpenCV对你将不再陌生。欢迎你步入OpenCV的殿堂,开始你的学习阶段吧!以上的内容大大部分都是来自文章开头的网址,不得不说,这位网友真心啊,写的太详细了,我粘贴都粘贴了半天,这里再次表示感谢,也鼓励大家去原网址看看~~接下来的,是我要说的重点,可能大家发现了,前面的步骤是不是非常顺利,不知道你按照上面来,是不是也这么顺利,总之,我是出现了各种问题,当然如果你已经顺利了,就不用看下面的了~~~5各种问题5.1Opencv版本问题原作者使用的是opencv2.4.9,本人使用的是opencv2.4.11,且我使用的CMake也不是3.0.1,而是3.4.1,这些可能带来一些差异,具体不知道,只是有一个是去确定的,在opencv2.4.11中,lkdemo.cpp做了些改动,它不再使用Megamind.avi了,而是直接调用你的电脑摄像头,因此,不知道其他版本的又是怎样,总之,列些这条就是想申明一点,可能有这些差异。5.2编译sample出问题在第4章中,利用CMake编译opencv自带的示例程序,其实原作者写的再详细不过了,但是我就是出现了一些问题,几经百度,终于解决了,问题如下:选择完文件夹之后,点击configure,半途跳出出错提示框(当时没有及时截图,真是失败),然后我在下面的提示框(就是下图下方的提示框)中找,里面有一段红色的文字描写出现的错误,请原谅当时一心想着解决问题,并没截图,总之问题是(当时用这个搜索的):CMakeErroratCMakeLists.txt:40(find_packag
本文标题:CMake编译Opencv自带源码及程序形成工程并运行教程
链接地址:https://www.777doc.com/doc-2906124 .html