PS:本文参考了
Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV这篇博文.
重编译OpenCV源代码,可以在调试时可以跟踪到OpenCV源代码内.另外也熟悉了Windows平台CMake的使用.
本机系统是Windows7 X64位版本,装有VS2012.
将OpenCV2.4.13解压到E:\OpenCV.
将CMake3.6.0解压到D:\cmake-3.6.0-rc1-win32-x86.
经过测试此版本的OpenCV不需要配置TBB,即可完成编译,相反配置了TBB还会造成4个项目生成失败.
在E盘目录下新建文件夹OpenCVProject, E:\OpenCVProject用于存放CMake生成的OpenCV工程
打开CMake
点击”Browse Source…”选择Opencv的目录E:\OpenCV\sources(内有CMake的组态档”CMakeLists.txt”),”Browse Build…”选择刚才自己新建的工程存放路径”E:\OpenCVProject”.点击”Configure”按钮,在出现的对话框中选择Visual Studio 11 2012(注意:VS2012对应的是VS11),默认Use default native compilers,Finish继续.
第一轮配置完后会出现红色标记
忽略它,继续点击”Configure”按钮,此时红色标记消失.
点击”Generate”按钮,生成VS2012工程,完成后,退出CMake.
打开VS2012,打开E:\OpenCVProject目录,打开OpenCV工程
选择CMakeTargets下ALL_BULID(此处原博文中是选择INSTALL,经过测试INSTALL会导致4个项目生成失败,反复测试都是如此,后来看到网上另一篇博文,现在已经找不到了,文中提示到要选择ALL_BUILD,按照此方法测试,编译Debug和Release全部生成成功,0个失败,再次感谢这篇博文作者)
右键”生成”,等待5分钟左右,全部生成成功.(开始编译后,可以听到CPU风扇
狂转,打开任务管理器,看到4个CPU核心都跑到100%了,Intel i7还是很给力的),完成后切换为Release模式,重复上一步生成Release版dll,lib.
按照参考博文上的流程,到此VS2012编译OpenCV已经完成了,开始我也这样认为,直接进行下一步,配置OpenCV开发环境,添加头文件目录的过程中,却发现本来在OpenCV工程目录install路径下”E:\OpenCVProject\install”,没有”include”目录,当时就傻眼了,都是按照流程一步一步来的,我的工程下却没有生成indlude相关文件,幸好灵机一动,打开OpenCV工程,选择”INSTALL”
右键生成,几秒钟后显示重新生成,0个失败.再打开”E:\OpenCVProject\install”目录,发现“include”目录已经躺在那里了.看来已经成功了一大半了,接着就可以开始测试了.
打开系统属性-环境变量-系统变量
打开Path了编辑系统变量,将上一步生成的dll目录添加到变量值中.Debug和Release版本的都要添加.
E:\OpenCVProject\bin\Debug;E:\OpenCVProject\bin\Release;
注:1、如果之前在Path环境变量中添加过已经编译好的OpenCV的dll目录,请先将其删除.然后再添加上一步生成dll的目录.2、配置万环境变量后,建议重启电脑,是其生效.
再新建一个Win32控制台项目,选择空项目。打开属性管理器,选择 “Debug|Win32”,
右键,添加新属性醒目表,命名为opencv2413x86.Debug.props,选择添加.
打开刚才添加的项目属性表,选择包含目录,依次添加以下路径:
E:\OpenCVProject\install\include;
E:\OpenCVProject\install\include\opencv;
E:\OpenCVProject\install\include\opencv2;
选择库目录,添加一下路径:
E:\OpenCVProject\lib\Debug;
在选择链接器-输入-依赖项,添加以下内容:
opencv_ml2413d.lib
opencv_calib3d2413d.lib
opencv_contrib2413d.lib
opencv_core2413d.lib
opencv_features2d2413d.lib
opencv_flann2413d.lib
opencv_gpu2413d.lib
opencv_highgui2413d.lib
opencv_imgproc2413d.lib
opencv_legacy2413d.lib
opencv_objdetect2413d.lib
opencv_ts2413d.lib
opencv_video2413d.lib
opencv_nonfree2413d.lib
opencv_ocl2413d.lib
opencv_photo2413d.lib
opencv_stitching2413d.lib
opencv_superres2413d.lib
opencv_videostab2413d.lib.
点击”确定”.
按同样的方式配置Release属性,在属性管理器中选择 “Release|Win32”,右键,添加新属性醒目表,命名为opencv2413x86.Release.props,选择添加.
打开刚才添加的项目属性表,选择包含目录,依次添加以下路径:
E:\OpenCVProject\install\include;
E:\OpenCVProject\install\include\opencv;
E:\OpenCVProject\install\include\opencv2;
选择库目录,添加一下路径:
E:\OpenCVProject\lib\Release;
再选择链接器-输入-依赖项,添加以下内容:
opencv_objdetect2413.lib
opencv_ts2413.lib
opencv_video2413.lib
opencv_nonfree2413.lib
opencv_ocl2413.lib
opencv_photo2413.lib
opencv_stitching2413.lib
opencv_superres2413.lib
opencv_videostab2413.lib
opencv_calib3d2413.lib
opencv_contrib2413.lib
opencv_core2413.lib
opencv_features2d2413.lib
opencv_flann2413.lib
opencv_gpu2413.lib
opencv_highgui2413.lib
opencv_imgproc2413.lib
opencv_legacy2413.lib
opencv_ml2413.lib
点击”确定”.
打开上一步新建工程的项目解决方案,右键源文件-添加-新建项,名称设为“main.cpp”
添加,然后输入一下代码.
#include
#include
#include
using namespace cv;
using namespace std;
std::string image_path = "D:\\Backup\\Image\\Lena.png" ;
std::string title = "Lena" ;
int main()
{
Mat img = imread(image_path);
if (img.empty())
{
cout << "error" ;
return -1;
}
namedWindow(title) ;
imshow(title, img);
waitKey();
return 0;
}
在”imread”这一行添加断点
按F5调试运行,在”imread”这一行代码停了下来,再按F11,可以看到已经进入”imread”函数内部
终于能愉快的玩耍了。
自从接触OpenCV已经3年多了,一直都打算加深了解,这次终于迈出了一小步,成功编译的OpenCV的源代码..开始以为这个问题很复杂,其实只要敢于动手试验,善于利用他人总结的资料,找出失败的原因,最终是可以完成目标的,尽管这个问题耗费了1天时间.