最近,由于需要从opencv源码部分对opencv中的某个函数进行修改,以提升算法的速度,因此一直在尝试使用vs2012来编译opencv。期间不乏多次的失败。今天通过实验发现了自己编译的opencv库终于可以使用了,不再出现之前出现的链接错误。现将编译过程记录如下,希望可以给需要的人提供思路和帮助。如发现错误之处,也请留言指出,谢谢。
首先,来看看opencv的安装目录(如下图),可以发现有两个子文件夹。其中build文件夹是已经编译好的,可以直接使用的,而source文件夹顾名思义就是opencv所有的的源码了。但是该源码并不是一个VS的工程文件,因此没法将整个整个源码像打开一个vs工程一样将其打开:
我们现在要做的第一步就是将source中的源码“解包”(“解包”是什么意思我现在也没有弄清楚,在某篇博客中看到的)成一个VS2012的项目。需要用到的工具是Cmake。
(1)下载并安装好cmake,如下图所示。(我使用的是3.0版本)
(2)在cmake中选择源码路径,并选择将要生成的opencv工程的解决方案的路径。
(3)路径设置好之后,点击Configure按钮。出现如下情况。根据自己的vs版本选择对应的即可。(我的是vs2012):
(4)点击finish后cmake开始工作,结束后出现configure down字样:
(5)再次点击一次Configure,红色部分消失,再次出现configure down:
(6)最后点击Generate,出现Generating down,完成了opencv的解包:
(7)来看看目标路径中都生成了什么。这就是我们通过cmake想要得到的vs2012的解决方案。打开Opencv.sln即可在vs2012中打开opencv的整个项目(注意,当前生成的目录中没有bin和lib这两个目录):
通过上面一步一步详细的介绍,我门现在终于可以饱览opencv源码真容了。我们打开Opencv.sln,在vs2012中打开opencv的项目:
可以看到,vs已经成功加载了opencv的整个项目。在解决方案上右键,并在弹出菜单中点击生成解决方案,等待几分中的时间:
待生成成功后,我们再来看看opencv项目目录,可以看到目录中多了两个文件夹lib和bin。这两个目录就是我们自己编译的opencv的库:
将bin和lib两个文件夹下的Debug目录下的文件全部拷贝到opencv的安装目录下,覆盖掉原来的lib和dll文件(这样的话就不用重新配置环境了)
编写一段测试程序(我在imshow源码中增加了一个cout<<“this is a test”<<endl;语句):
#include<opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main() { int i; Mat img = imread("test.jpg"); if (img.empty()) { fprintf(stderr,"Error:load image failed."); system("pause"); return -1; } namedWindow("image",CV_WINDOW_AUTOSIZE); imshow("image",img); waitKey(); system("pause"); return 0; }
运行后结果如下,可以看到,控制台中输出了this is a test!:
至此,整个opencv的编译过程到此结束。希望可以给大家帮助!
参考博客:
http://www.tuicool.com/articles/f6ZBZv
原创博文,转载请注明出处:http://www.cnblogs.com/xiongmao-cpp/