使用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/
使用visual studio 2012 编译opencv2.4.9的更多相关文章
- Visual Studio 2012编译的程序无法在XP下运行的解决办法【转】
		最近看到一篇<Windows编程革命简史>,想到以前刚开始用VS2012的时候,编译的程序在其他人那无法运行,一查才知道是VS2012本身不支持XP.当然现在微软早已在VS2012 Upd ... 
- Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案(转载)
		转载:http://www.th7.cn/Program/c/201303/127343.shtml 原因是Visual C++ 2012 使用了更加安全的 run-time library rout ... 
- Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案
		在VS 2012 中编译 C 语言项目,如果使用了 scanf 函数,编译时便会提示如下错误: error C4996: 'scanf': This function or variable may ... 
- [转]Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案
		原文地址:http://www.cnblogs.com/gb2013/archive/2013/03/05/SecurityEnhancementsInTheCRT.html 在VS 2012 中编译 ... 
- Visual Studio 2012 编译C++显示cl命令
		为了用newlisp来实现VC编译,以便用我的Emacs开发VC程序,而不需要再打开VS 2012, 需要自己实现命令行的编译.我不需要nmake,因为我想直接了解VC编译器,以便今后更好的驾驭它. ... 
- 【解决】Microsoft Visual Studio 2012 打开2008下编译的silverlight3项目
		最近因为项目需要,老师要我搞一发流程设计器,毫无头绪呀妈蛋 .. 我考虑是用silverlight呢还是jquery .. 上网找了找 .. 有一个用silverlight3写的 貌似IDE用的是V ... 
- VISUAL STUDIO 2012下的OPENCV 2.4.7安装过程
		邮箱已经收到了Visual Studio 2013的升级通知,但是很多软件如OpenCV.Qt等都只有VS2012的预编译库,还是懒得升级了(除非VS支持C++11了). 网上搜了一些VS2012(或 ... 
- 在Visual Studio 2012中使用VMSDK开发领域特定语言(二)
		本文为<在Visual Studio 2012中使用VMSDK开发领域特定语言>专题文章的第二部分,在这部分内容中,将以实际应用为例,介绍开发DSL的主要步骤,包括设计.定制.调试.发布以 ... 
- 在Visual Studio 2012中使用VMSDK开发领域特定语言(一)
		前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modeling SDK进行领域特定语言(DSL)的开发,包括两个部分的内容.在第一部分中,将对 ... 
随机推荐
- 7添加一个“X”到HTML:转到XHTML
			XHTML中的X代表extensible,是以XML为基础的另一种说法.XML表示可扩展的标记语言. XML是一种可以用来开发新的标记语言的语言,而HTML只是一门标记语言. HTML转化为XHTML ... 
- JBPM TaskInstance 对象创建过程
			对象获得过程如下: 获得对象工厂--->工厂创建代理对象 TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance(); TaskI ... 
- jboss4.2.3建立oracle JMS应用
			一.基本配置 1 增加oracle驱动文件,ojdbc6.jar,不能使用小于该版本的jdbc驱动,jboss-4.2.3.GA\server\default\lib 2 增加retrotransla ... 
- java CyclicBarrier 2
			//Listing 6-2. Using a Cyclic Barrier to Decompose a Task into Subtasks import java.util.concurrent. ... 
- 运维技能大全 | Devops Tools 周期表
			老外整理的 Devops Tools 周期表,可以用酷炫屌炸天形容,划分了数据库.CI.日志.安全.监控.配置管理.云服务等15个大类,120个工具.我是有点孤陋寡闻,很多都没听说过,你要是全学会了你 ... 
- 实例讲述PHP面向对象的特性;;;php中const与define的使用区别
			php中const与define的使用区别 1.const:类成员变量定义,一旦定义且不能改变其值. define:定义全局常量,在任何地方都可以访问.2.define:不能在类中定义,而const可 ... 
- java JDK8 学习笔记——第16章 整合数据库
			第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ... 
- 注册、启动、停止windows服务
			找到本机InstallUtil.exe命令 命令行下注册服务InstallUtil.exe D:\XXXXService.exe 启动服务 net start XXXXService 停止服务net ... 
- Java进程间通信
			传统的进程间通信的方式有大致如下几种: (1) 管道(PIPE) (2) 命名管道(FIFO) (3) 信号量(Semphore) (4) 消息队列(MessageQueue) (5) ... 
- VB的注释
			VB程序中的注解有两种: 第1种是以单引号 ' 开头的,但如果这个符号是在双引号之内的,则视为文本,不做为注释引导符,这个符号后面的内容均为注释内容. 第2种就REM后加注释内容(REM与注释内容要空 ... 
