最近想自己编译一下OpenCV源代码,以用于调试时查看源代码运行情况。
参考网上一篇文章:《Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV》 进行配置,但是错误频频。现将配置过程进行梳理,以免大家跟我一样走太多的弯路。
下载并安装这几个工具:CMake2.8、OpenCV2.4.9、VS2010
基本按照文章《Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV》进行操作即可。
这里点击Configure按钮,在出现的对话框中选择Visual Studio 10,同时,貌似新版本已经不需要配置TBB了,所以只需要注意:
(1)设置好源代码路径
(2)设置好生成路径
(3)点击Configure 直到没有红色栏后,点击Generate 生成项目工程即可。
这里注意:
(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& 的函数,字符串就无法正常传递,调试时发现函数形参一直是<错误的指针>,无法赋值。具体原因不太懂,但折腾了一整天。
新建测试工程TestOpenCV,并在属性管理器中,选择Debug | Win32,右键点击 “添加新项目属性表”,并命名为opencv249x86.Debug ,同理在Release | Win32 处新建一个项目属性表,并命名为opencv249x86.Release(PS:可将这两个项目属性表保存起来,当需要创建新工程时,直接复制到项目工程下,并添加进去就好。)
双击新建的项目属性表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
在 链接器->输入->附加依赖项处添加:
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不同,包含的库目录不同。
#include
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;
}