Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV

PS:本文参考了
Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV这篇博文.


重编译OpenCV源代码,可以在调试时可以跟踪到OpenCV源代码内.另外也熟悉了Windows平台CMake的使用.

本机系统是Windows7 X64位版本,装有VS2012.

准备工作,下载好Open, CMake, TBB:

  • OpenCV2.4.13
  • CMake3.6.0
  • tbb44_20160526oss

OpenCV2.4.13CMake3.6.0tbb44_20160526oss

将OpenCV2.4.13解压到E:\OpenCV.
将CMake3.6.0解压到D:\cmake-3.6.0-rc1-win32-x86.
经过测试此版本的OpenCV不需要配置TBB,即可完成编译,相反配置了TBB还会造成4个项目生成失败.

用CMake生成VS2012工程

在E盘目录下新建文件夹OpenCVProject, E:\OpenCVProject用于存放CMake生成的OpenCV工程
打开CMake

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第1张图片

点击”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继续.

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第2张图片

第一轮配置完后会出现红色标记

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第3张图片

忽略它,继续点击”Configure”按钮,此时红色标记消失.

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第4张图片

点击”Generate”按钮,生成VS2012工程,完成后,退出CMake.

用OpenCV VS2012工程编译生成自己的OpenCV库

打开VS2012,打开E:\OpenCVProject目录,打开OpenCV工程

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第5张图片

选择CMakeTargets下ALL_BULID(此处原博文中是选择INSTALL,经过测试INSTALL会导致4个项目生成失败,反复测试都是如此,后来看到网上另一篇博文,现在已经找不到了,文中提示到要选择ALL_BUILD,按照此方法测试,编译Debug和Release全部生成成功,0个失败,再次感谢这篇博文作者)

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第6张图片

右键”生成”,等待5分钟左右,全部生成成功.(开始编译后,可以听到CPU风扇
狂转,打开任务管理器,看到4个CPU核心都跑到100%了,Intel i7还是很给力的),完成后切换为Release模式,重复上一步生成Release版dll,lib.
按照参考博文上的流程,到此VS2012编译OpenCV已经完成了,开始我也这样认为,直接进行下一步,配置OpenCV开发环境,添加头文件目录的过程中,却发现本来在OpenCV工程目录install路径下”E:\OpenCVProject\install”,没有”include”目录,当时就傻眼了,都是按照流程一步一步来的,我的工程下却没有生成indlude相关文件,幸好灵机一动,打开OpenCV工程,选择”INSTALL”

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第7张图片

右键生成,几秒钟后显示重新生成,0个失败.再打开”E:\OpenCVProject\install”目录,发现“include”目录已经躺在那里了.看来已经成功了一大半了,接着就可以开始测试了.

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第8张图片

配置Opencv开发环境

打开系统属性-环境变量-系统变量

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第9张图片

打开Path了编辑系统变量,将上一步生成的dll目录添加到变量值中.Debug和Release版本的都要添加.
E:\OpenCVProject\bin\Debug;E:\OpenCVProject\bin\Release;

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第10张图片

注:1、如果之前在Path环境变量中添加过已经编译好的OpenCV的dll目录,请先将其删除.然后再添加上一步生成dll的目录.2、配置万环境变量后,建议重启电脑,是其生效.

再新建一个Win32控制台项目,选择空项目。打开属性管理器,选择 “Debug|Win32”,

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第11张图片

右键,添加新属性醒目表,命名为opencv2413x86.Debug.props,选择添加.
打开刚才添加的项目属性表,选择包含目录,依次添加以下路径:

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第12张图片
Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第13张图片

E:\OpenCVProject\install\include;
E:\OpenCVProject\install\include\opencv;
E:\OpenCVProject\install\include\opencv2;

选择库目录,添加一下路径:
E:\OpenCVProject\lib\Debug;

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第14张图片

在选择链接器-输入-依赖项,添加以下内容:
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.

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第15张图片

点击”确定”.

按同样的方式配置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”

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第16张图片

添加,然后输入一下代码.

    #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”这一行添加断点

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第17张图片

按F5调试运行,在”imread”这一行代码停了下来,再按F11,可以看到已经进入”imread”函数内部

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第18张图片

终于能愉快的玩耍了。

Win7x64+VS2012+OpenCV2.4.13+CMake3.6.0重编译OpenCV_第19张图片

自从接触OpenCV已经3年多了,一直都打算加深了解,这次终于迈出了一小步,成功编译的OpenCV的源代码..开始以为这个问题很复杂,其实只要敢于动手试验,善于利用他人总结的资料,找出失败的原因,最终是可以完成目标的,尽管这个问题耗费了1天时间.

你可能感兴趣的:(OpenCV)