VS2010重编译OpenCV2.4.9 用于调试源代码

最近想自己编译一下OpenCV源代码,以用于调试时查看源代码运行情况。

参考网上一篇文章:《Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV》 进行配置,但是错误频频。现将配置过程进行梳理,以免大家跟我一样走太多的弯路。

1、工具

下载并安装这几个工具:CMake2.8、OpenCV2.4.9、VS2010

2、用CMake生成OpenCV2.4.9 的VS2010解决方案

基本按照文章《Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV》进行操作即可。

这里点击Configure按钮,在出现的对话框中选择Visual
Studio 10,同时,貌似新版本已经不需要配置TBB了,所以只需要注意:

(1)设置好源代码路径

(2)设置好生成路径

(3)点击Configure
直到没有红色栏后,点击Generate 生成项目工程即可。

3、打开opencv工程并编译源代码,生成我们所需要的动态链接库

这里注意:

(1)应该选择ALL_BUILD项目,右键进行“生成”,而不是INSTALL。

(2)分别在Debug模式和Release模式下对项目进行生成。

(3)如果生成过程中出现LINK
: fatal error LNK1181: 无法打开输入文件“..\..\lib\Release\opencv_ocl249.lib”
,则说明该lib生成不成功,具体解决办法估计大同小异,可参考这篇文章(不懂cmake伤不起啊。。)。

4、配置Opencv环境变量

注意,这里也是跟上述文章不一样的地方,估计是因为OpenCV版本升级的原因,导致配置上有所不同吧,

环境变量path应该添加以下两个路径:

D:\Program Files\opencv2.4.9\vc10solution\bin\Debug  和  D:\Program Files\opencv2.4.9\vc10solution\bin\Release

注:D:\Program Files\opencv2.4.9\vc10solution 是我用CMake生成的VS2010工程的所在目录。

说明:之前用的是OpenCV自带编译版本的请注意了,应该将原来环境变量删除后再添加。我一开始没有删除导致后面一直调试不成功,即使能跟踪源代码了,但是只要函数形参是const string& 的函数,字符串就无法正常传递,调试时发现函数形参一直是<错误的指针>,无法赋值。具体原因不太懂,但折腾了一整天。

5、创建测试工程

5.1 添加新项目属性表

新建测试工程TestOpenCV,并在属性管理器中,选择Debug | Win32,右键点击 “添加新项目属性表”,并命名为opencv249x86.Debug  ,同理在Release | Win32 处新建一个项目属性表,并命名为opencv249x86.Release(PS:可将这两个项目属性表保存起来,当需要创建新工程时,直接复制到项目工程下,并添加进去就好。)

5.2 配置包含目录和库目录

双击新建的项目属性表opencv249x86.Debug,在VC++目录->包含目录,VC++目录->库目录进行设置:

VC++目录->包含目录:

D:\Program
Files\opencv2.4.9\vc10solution\install\include

D:\Program
Files\opencv2.4.9\vc10solution\install\include\opencv

D:\Program
Files\opencv2.4.9\vc10solution\install\include\opencv2

VC++目录->库目录:

D:\Program
Files\opencv2.4.9\vc10solution\lib\Debug

5.3添加附加依赖项


链接器->输入->附加依赖项处添加:

opencv_calib3d249d.lib

opencv_contrib249d.lib

opencv_core249d.lib

opencv_features2d249d.lib

opencv_flann249d.lib

opencv_gpu249d.lib

opencv_highgui249d.lib

opencv_imgproc249d.lib

opencv_legacy249d.lib

opencv_objdetect249d.lib

opencv_ts249d.lib

opencv_video249d.lib

opencv_nonfree249d.lib

opencv_ocl249d.lib

opencv_photo249d.lib

opencv_stitching249d.lib

opencv_superres249d.lib

opencv_videostab249d.lib

同理,在opencv249x86.Release 中也是类似的设置:

VC++目录->包含目录:

D:\Program
Files\opencv2.4.9\vc10solution\install\include

D:\Program
Files\opencv2.4.9\vc10solution\install\include\opencv

D:\Program
Files\opencv2.4.9\vc10solution\install\include\opencv2

VC++目录->库目录:

D:\Program
Files\opencv2.4.9\vc10solution\lib\Release

链接器->输入->附加依赖项处添加:

opencv_calib3d249.lib

opencv_contrib249.lib

opencv_core249.lib

opencv_features2d249.lib

opencv_flann249.lib

opencv_gpu249.lib

opencv_highgui249.lib

opencv_imgproc249.lib

opencv_legacy249.lib

opencv_ml249.lib

opencv_objdetect249.lib

opencv_ts249.lib

opencv_video249.lib

opencv_nonfree249.lib

opencv_ocl249.lib

opencv_photo249.lib

opencv_stitching249.lib

opencv_superres249.lib

opencv_videostab249.lib

至此,我们的所有配置已经完成,主要与文章区别的地方在环境变量path不同,包含的库目录不同

5.4添加测试代码

<span style="font-size:14px;">#include <opencv2\opencv.hpp>

using namespace cv;
using namespace std;
int main()
{
	Mat img = imread("E:\\test\\lena.jpg");
	if(img.empty())
	{
		cout<<"error";
		return -1;
	}
	imshow("test",img);
	waitKey();

	return 0;
}</span>

调试模式下可以跟踪进源代码:

VS2010重编译OpenCV2.4.9 用于调试源代码

时间: 2024-10-19 21:15:21

VS2010重编译OpenCV2.4.9 用于调试源代码的相关文章

win8.1 + VS2010 + OpenCV2.4.10重编译OpenCV开发环境搭建

win8.1 + VS2010 + OpenCV2.4.10重编译OpenCV开发环境搭建 重编译的好处:可以调试的时候看OpenCV的源代码. 重编译要得到的东西:Debug版本和Release版本的dll,lib,头文件.(dll添加到环境变量里,运行时用,自己编译的dll调试时可以跟踪到Opencv的源码内:lib和头文件配置到编译器里) PS:如果只是使用Opencv而不需要跟踪源码,则使用Opencv自带的库文件即可.跳到5配置Opencv开发环境,对应的文件都在..\opencv\b

win10 + VS2010 + OpenCV2.4.10重编译OpenCV开发环境搭建

win10 + VS2010 + OpenCV2.4.10重编译OpenCV开发环境搭建 重编译的优点:能够调试的时候看OpenCV的源码. 重编译要得到的东西:Debug版本号和Release版本号的dll,lib,头文件.(dll加入到环境变量里,执行时用,自己编译的dll调试时能够跟踪到Opencv的源代码内:lib和头文件配置到编译器里) PS:假设仅仅是使用Opencv而不须要跟踪源代码,则使用Opencv自带的库文件就可以. 跳到5配置Opencv开发环境.相应的文件都在..\ope

存储过程中引用的常规表,临时表以及表变量是否会导致存储过程的重编译

在存储过程中,经常要引用一些表来存储一些中间数据,用完即删.对于这个中间表,用常规表,临时表或者表变量有什么区别呢? 下面我们看一下这三种中间表是否会造成执行计划的重编译. 首先打开sql server profile,监控存储过程. 1.建第一个存储过程,在存储过程中创建常规表TT1 CREATE PROCEDURE TEST1_PRO AS BEGIN CREATE TABLE TT1( ID INT IDENTITY, NAME VARCHAR(10) ) INSERT INTO TT1

在vs2010中编译log4cxx-0.10.0详细方法(从下载、编译、解决错误详细介绍)(转载)

本文一共包含了17个步骤,按照下面的步骤就可以完成vs2010中编译log4cxx的工作了. 1. 下载 log4cxx 以及 apr 和 apr-util 源码: a) http://www.apache.org/dyn/closer.cgi/logging/log4cxx/0.10.0/apache-log4cxx-0.10.0.zip b) http://archive.apache.org/dist/apr/apr-1.2.11-win32-src.zip c) http://archi

Hadoop 2.3.0-cdh5.1.0重编译

Hadoop版本有很多,这里我选择的是cdh版本.cdh是Cloudera公司在Apache原版基础经过加工的东西.chd具体的下载地址为: http://archive-primary.cloudera.com/cdh5/cdh/5/ 版本信息如下: Hadoop:Hadoop 2.3.0-cdh5.1.0 JDK:1.7.0_79 Maven:apache-maven-3.2.5(3.3.1以及更高版本必须在JDK1.7以上) Protobuf:protobuf-2.5.0 Ant:1.7.

存储过程重编译的优点、缺点、确定引发语句

存储过程通过明确地将查询的可变部分转换为参数来增进执行计划的可重用性.这使执行计划在查询以可变部分的相同或不同值重新提交时可以被重用.存储过程包含一组复杂的SQL语句,使生成存储过程的执行计划的代价有些高.因此,通常重用存储过程的执行计划来代替生成新计划是有利的.但是,有时候现有的计划可能不适用或者在重用期间可能不能提供最佳的处理策略.SQL Server重编译存储过程中的语句来生成一个新的执行计划,以解决这个问题. 一.重编译的好处 存储过程的重编译既有好处又有缺点,有时候,为查询考虑一个新的

分析存储过程重编译的起因以及避免

为了改进性能,分析重编译的起因很重要.往往,重编译可能并不需要,可以避免它以改进性能.了解导致重编译发生的不同条件有助于评估重编译的起因,并决定在重编译不必要时避免它的方法. 存储过程重编译在以下情况下发生: 存储过程语句中引用的常规表.临时表或视图的架构变化.架构变化包括表的元数据或表上索引的变化: 常规或临时表的列上的绑定(如默认/规则)变化. 表索引或列上的统计的变化超过一定的阈值. 存储过程编译时一个对象不存在,但是在执行期间创建(延迟对象解析): SET选项变化: 执行计划老化并释放:

【转载】VS2010+VMWare8+VisualDDK1.5.6 创建并调试驱动程序 - 完全教程

原帖:http://techird.blog.163.com/blog/static/1215640362011112385241568/ 本文描述了如何使用Visual Studio+VMMare+VisualDDK来创建.编译和调试你的第一个驱动程序.本文提供在开发和调试工具的环境下详细的操作步骤,而无需太多的关心这些环境背后所做的事情. 本教程我们会创建以下驱动测序并且在虚拟机上测试它: · 一个超级简单的驱动,加载时打印一条信息 如果你有另外一台实体机,你就不用安装虚拟机了.不过,你可能

在vs2010中编译log4cxx-0.10.0详细方法

本文一共包含了17个步骤,按照下面的步骤就可以完成vs2010中编译log4cxx的工作了. 1. 下载 log4cxx 以及 apr 和 apr-util 源码: a) http://www.apache.org/dyn/closer.cgi/logging/log4cxx/0.10.0/apache-log4cxx-0.10.0.zip b) http://archive.apache.org/dist/apr/apr-1.2.11-win32-src.zip c) http://archi