CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx

上传人:b****3 文档编号:7180693 上传时间:2023-05-08 格式:DOCX 页数:36 大小:2.64MB
下载 相关 举报
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第1页
第1页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第2页
第2页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第3页
第3页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第4页
第4页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第5页
第5页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第6页
第6页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第7页
第7页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第8页
第8页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第9页
第9页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第10页
第10页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第11页
第11页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第12页
第12页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第13页
第13页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第14页
第14页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第15页
第15页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第16页
第16页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第17页
第17页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第18页
第18页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第19页
第19页 / 共36页
CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx

《CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx(36页珍藏版)》请在冰点文库上搜索。

CMake编译Opencv自带源码及程序形成工程并运行教程Word文档下载推荐.docx

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

CMake可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。

CMake支援in-place建构(二进档和源代码在同一个目录树中)和out-of-place建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。

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

“CMake”这个名字是“CrossPlatformMake”的缩写。

虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。

 

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

我们可以在CMake的官网:

.cmake.org/cmake/resources/software.html上找到最新版本的CMake安装文件。

至于为什么选择的是win32-x86.exe,很多人也许有疑惑,我明明是x64的电脑,怎么选择这个呢,其实我也不太懂,这里只能鼓起勇气说几句,如果我们稍微留意点的话,会发现,我们经常建立的.cpp程序都是win32(x86)控制台应用程序是吧,我一直纳闷,为什么是这个呢?

我想可能是编译器是对应这个型号的吧,这玩意好像一直到VS2013都是只有win32(x86)对应的编译器,但到了VS2015,就不一样了,即有win32对应的编译器,还有x64对应的编译器(也即向前兼容),嗯,我只能说这么多了,而且还不知道对不对,总之,本教程只是经验之谈,涉及到的理论部分,纯粹是为了补补边,大家觉得正确就接受,有错误的话,请原谅~~

选择文件“CMake-3.0.1-win32-x86.exe”下载,一共10.78MB,很快可以下完。

下载完成后,双击安装程序,即可开始CMake的安装。

安装很简单,基本上就是“下一步”,直至最后一步“完成”。

我的习惯,肯定要创建桌面快捷方式了,这样方便啊~~当然可能不经常用,那也可以随时删~~~

发现上面这个图没有,CMake好强大,自动识别并列出你有的一些程序,当然有你的VS了~~~

安装完成后,可以在“开始”菜单中找到已经安装好的CMake3.0.1程序的快捷方式"

CMake(cmake-gui)"

当然,之前已经有选择创建快捷方式,安装之后,桌面上就有快捷方式。

安装好了以后,下面开始进行OpenCV源码的编译。

2OpenCV2.4.9源码编译

这里假设我们已经将OpenCV2.4.9的源码下载并且安装好了。

(如果这一步不知道怎么做,请参看本人另一个教程《学习OpenCV的学习笔记系列

(一)环境配置》)。

(这是原网友的话,我之前也写过一个关于各Opencv与各版本VS配置的教程,可以在XX文库搜索《OpenCV在VisualStudio中的属性表配置方法(通用)》),如下图示。

在“开始”菜单中点击“CMake(cmake-gui)”,打开CMake程序,此时将弹出编译设置界面。

如下图所示。

在"

Whereisthesourcecode"

选项的文本框中输入OpenCV源码所在的目录路径(opencv文件提取的位置),可以点击"

BrowseSource…"

选择文件夹,请根据源码安装的实际位置选择路径,此处选择的是"

H:

/opencv/sources"

Wheretobuildthebinaries"

选项的文本框中输入需要构建样例工程及源码的文件目录路径,此处选择的是与源码同一文件夹下的"

/OpenCV/Solution"

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

Configure"

按钮。

如果是第一次配置,那么将会弹出一个选择生成工程目标环境的界面,此处选择“VisualStudio102010”选项,勾选"

Usedefaultnativecompilers"

,然后点击"

Finish"

因为我使用的是VS2010,而且与opencv配置的也只有VS2010。

如果生成目标目录路径不存在,那么会有一个提示新建目录的对话框,如下图所示,直接点"

Yes"

即可。

第一次配置会出现很多红色的选项,别管它,再点击一次"

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

点击"

Generate"

按钮

在看到最下方有"

Generatingdone"

字样后,说明源码工程编译完毕。

3OpenCV2.4.9源码工程测试

打开上一步设置的生成目录路径下的文件夹,可见有一个"

Solution"

文件夹,这个是上一步设置中自动生成的,双击该文件夹。

/opencv/Solution"

路径下,我们可以看到有一个已经编译生成好了的VS2010工程文件"

OpenCV.sln"

,双击该文件,既可以在VS2010中打开该工程文件。

在打开的"

OpenCV"

工程中,我们可以看到有68个项目。

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

编译用时较长,我的PC配置算是比较好的,但是编译也一共耗时约2分钟左右,生成62个工程,失败0个,说明全部编译通过。

恭喜自己一下!

接下来,就可以逐个工程去查看,编译了。

关于这些样例工程及源码的解释,后续将补充。

(这话是原作者说的~~不是我说的啊~~)

4OpenCV2.4.9自带样例源码编译及测试

以上介绍的是OpenCV的源码编译及工程,下面介绍怎么编译OpenCV自带的样例源码及工程。

熟门熟路地打开CMake3.0.1,将源码路径改为:

"

/opencv/sources/samples"

(具体路径随安装位置而不同,在opencv的源码安装目录下可以找到“sample”文件夹)。

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

),在目标目录下,可以找到已经生成好了的OpenCV的样例工程文件:

“samples.sln”

点击打开"

samples.sln"

,看到解决方案资源管理器中显示一共有172个项目(样例真多,好好看哈!

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

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

整体编译无误后,随手打开一个样例工程,本文选择“(EXAMPLE)lkdemo”工程。

此工程源码使用改进的Lucas-Kanade光流算法,用于检测视频运动目标。

用鼠标点击目标点,可视频跟踪。

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

通过单步运行调试发现,在“lkdemo.cpp”文件的56行的"

if(!

cap.isOpened());

判断语句中,播放器没有打开,直接在控制台显示一行“Could

notinitializecapturing…”就退出了。

分析其原因,是因为“cap.open("

Megamind.avi"

);

”这个语句中的视频文件“Megamind.avi”不在程序目录下。

知道原因,就好解决了!

在“H:

\opencv\sources\samples\cpp”目录下(源码文件目录)拷贝“Megamind.avi”文件至“H:

\opencv\sampleSolution\cpp\Debug”目录下(此乃程序“cpp-example-lkdemo.exe”所在目录)。

换句话说,就是要确保在程序运行的目录下有“Megamind.avi”文件即可。

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

截图如下:

OK,这其中的原理及工作流程我就不介绍了,自己看源码,其他样例工程的源码可以一个个去看,然后编译运行,相信将这些样例都熟悉理解摸透后,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自带的示例程序,其实原作者写的再详细不过了,但是我就是出现了一些问题,几经XX,终于解决了,问题如下:

选择完文件夹之后,点击configure,半途跳出出错提示框(当时没有及时截图,真是失败),然后我在下面的提示框(就是下图下方的提示框)中找,里面有一段红色的文字描写出现的错误,请原谅当时一心想着解决问题,并没截图,总之问题是(当时用这个搜索的):

CMakeErroratCMakeLists.txt:

40(find_package):

,还有几句话说的更详细,说什么CMake找不到OpenCVConfig.cmake之类的,问题的具体表现是,下图中红色圈起来的值为空。

(虽没截图,这样描述大概清楚了,红色圈起部分原先为空,截的图是我解决之后截的,因此有值)

几经尝试,还是configure失败,终于,让我在网上搜到了,这里给出网址:

stackoverflow./questions/27127153/cmake-error-at-cmakelists-txt-cmake-prefix-path。

归根结底,是CMake的路径问题,

还记得在VS中配置opencv吗,也涉及到路径问题,这里也一样。

网址上关键的几句话是:

不得不说,这人是个牛人啊,我立刻反应到CMake的搜索路径里,可能没有包含OpenCVConfig.cmake的路径,于是在上图中红色方框里,对OpenCV_DIR进行了赋值,OpenCVConfig.cmake所在的地方,上面的牛人说了,在opencv\build\x86\vc10\lib(注意这里是我的是vs2010,因此选择的vc10,如果还是出错,有可能是不是vs2010造成,要选其他的(猜测))如下图示,

注意不要点击上图中的addentry新建一个环境变量,CMake了已经有了环境变量Opencv_DIR。

然后在点击configure,天呐,成功了,此刻的我心情一顿激动,再点击generate,也没有问题,真真是乐坏了啊~~~

5.3运行lkdemo.cpp问题

满以为,编译完sample之后,打开生成的samples.sln文件之后,并按第4章讲的,形成解决方案之后,就可以尽情玩耍了,可以任意运行里面的例子了,没曾想到,我一运行,就跳出

或者是这个:

此刻,我的心情是崩溃的,因为为解决5.2中的问题我已经很烦了,紧接着又来这么个问题,但还是静下心来解决他,毕竟我想运行里面的示例程序啊~~~

几经XX,牛人真的是有啊,给出网址:

stackoverflow./questions/7013309/visual-studio-debugger-error-unable-to-start-program-specified-file-cannot-be-f。

(有没有注意,和5.2给出的网址是同一个论坛上的,看样子这个论坛很有价值啊)我搜索用的关键字是:

unabletostartprogramall_build。

这位牛人给出的关键性回答如下:

看到点赞的人数居然有35之多,看样子遇到这个问题的人还不少,同时反映出这个牛人给的方法是好的。

我的理解是,因为sample里面有很多的示例程序,在经过CMake编译之后,我们再到VS2010界面形成解决方案,这个解决方案是一个总的解决方案,每个示例程序都是其中的一个工程(一个方案下可以有多个工程,一个工程下有很多的源文件),但是这么多工程放在一起,你随意挑一个工程,比如

打开其源文件,点运行,那么就有问题了。

这么多工程在同一个方案下,凭什么点运行就是运行lkdemo工程呢,就因为你打开了其源文件吗?

显然不是,牛人这样说的:

GuessingfromtheinformationIhave,you'

renotactuallycompilingtheprogram,buttryingtorunit.Thatis,BUILD_ALLissetasyourstartupproject.(Itshouldbeinaboldfont,unliketheotherprojectsinyoursolution)Ifyouthentrytorun/debug,youwillgettheerroryoudescribe,becausethereissimplynothingtorun,大概的意思是,这些文件并没有真正的被编译,你直接想去运行当然要出错了,出现“Unabletostartprogram'

D:

\ProgramFiles\EXP\MyProject-bin\Debug\ALL_BUILD”这个错误是因为你将BUILD_ALL工程设置为启动工程,这个工程在所有列出工程的最下面

也许你看出来了,上面提到的另一种错误形式是关于INSTALL的,没错,也就是你设置了INSTALL为整个方案的启动工程了,这两个工程,其实都是没有真正编译形成.exe文件的,因此不能作为启动工程,可以找到samples.sln文件所在文件夹中的debug文件夹是空的,如下图示

而正常来说,编译完之后里面有对应工程的.exe文件才是,不信你可以看看你以前建立的工程文件。

牛人的第二句话就更牛了:

TheprojectismostlikelygeneratedviaCMAKEandincludedinyourVisualStudiosolution.Setanyoftheprojectsthatdogeneratea.exeasthestartupproject(byright-clickingontheprojectandselecting"

setasstartupproject"

)andyouwillmostlikelywillbeabletostartthosefromwithinVisualStudio.他说这个工程可能是CMake编译的,然后被包含你的VS中,一语点中要点啊。

接下来他给出了解决方案,说不要设置这两个没有生成.exe文件的工程为启动工程,任意设置一个生成.exe文件的工程为启动工程就可以解决了。

好了,牛人的回答结束了,那么,问题来了,到底谁是生成.exe的工程呢?

开始我也很茫然,因为整个debug文件夹都是空啊,似乎没有哪个工程有生成.exe文件,无奈在CMake对sample编译形成的整个文件里找啊找,终于发现了,在cpp\debug,这个debug文件夹里有好多的.exe文件啊,好激动,一看,果然对应上了哪些工程,这不就是生成了.exe文件的工程吗,至于为什么不在samples.sln文件所在的文件夹的debug里,而在这个cpp\debug下,我想没有必要知道,

也就是,下面这一堆工程,其实大都生成了.exe文件了,都可以作为启动工程(巧了,编译完之后,我偏偏遇上默认设置ALL_BUILD为启动工程,真是够背的),按照大牛的做法,我随意的挑了个工程,右键设置为启动工程:

然后我满怀期望的再次打开lkdemo工程的源文件,点击运行~~结果,结果,我要心碎了,还是出现那个令人恶心的方框,顿时我就傻了,后来静了静,想了又想,牛人都说到点上了,怎么会出错,最终我定格到牛人说的”任意“二字上,为什么是任意呢,我现在运行的是lkdemo啊,我不知道方案下工程与工程之间到底是什么关系(小白,你懂的),总之我怀着试一下的心态,直接将lkdemo设置为启动工程,再次打开进入lkdemo的源文件,点击运行,苍天啊,终于运行啊啊啊啊啊~~

6结束

终于写完了~~~

希望有所帮助~~~

如果有错误,希望可以留言回复指出,并请包涵~~

尤其是理论部分,本人确是小白~~~

再次感谢那位网友~~~

2016/01/13

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2