• 使用visual studio 2012 编译opencv2.4.9


      最近,由于需要从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/

    ——来自 熊猫 [http://www.cnblogs.com/xiongmao-cpp/]
  • 相关阅读:
    Linux PCI网卡驱动的详细分析
    moand的编程学形式:一个(高阶)类型包办程序的组织--类型关乎复合
    范畴论完全解读:函子是范畴(高阶类型)间的映射
    函数式编程从起点到终点
    锁的本质:操作的序列化
    并发编程概述--C#并发编程经典实例
    异步IO的概念
    基于事件的并发编程
    runloop是iOS系统上的actor模式
    Monad、Actor与并发编程--基于线程与基于事件的并发编程之争
  • 原文地址:https://www.cnblogs.com/xiongmao-cpp/p/4769283.html
Copyright © 2020-2023  润新知