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

来源:互联网 发布:用友软件教学视频 编辑:程序博客网 时间:2024/05/01 07:52

最近想自己编译一下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>

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



2 1