Win7x64+VS2013+opencv-3.1.0+cmake-3.11.0-win64-x64+重编译OpenCV

参考Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV博客

如果需要额外配置扩展模块

重编译的好处:可以调试的时候看OpenCV的源代码。

重编译要得到的东西:Debug版本和Release版本的dll,lib,头文件。(dll添加到环境变量里,运行时用,自己编译的dll调试时可以跟踪到Opencv的源码内;lib和头文件配置到编译器里)

PS:如果只是使用Opencv而不需要跟踪源码,则使用Opencv自带的库文件即可。跳到5配置Opencv开发环境,对应的文件都在..\opencv\build\目录下,其中dll(bin目录),lib目录在平台文件夹下如..\opencv\build\ x86\vc10。

本机Win7 64位系统,装有VS2013,以编译64位的Opencv库为例,要编译64位库需要注意选择64位的配置。

这里需要选择合适的编译器,由于我用的是64位的系统,所以我选择如上的编译器。当然如果我们配置OpenCV时只需要使用到32位的,也可以选在Viusal Studio 10,完成选择后点击Finish。

1下载安装cmake运行cmake-gui

2指定OpenCV的安装路径

3指定解决方案的存放路径

4第一次Configure

5第二次Configure

6点击Generate大功告成

7添加新项目属性表

首先,要用cmake编译一下OpenCV;然后,就是修改源码了;接着,配置新生成的dll和lib;最后,测试。

1、下载安装cmake

想要在Windows平台下生成OpenCV的解决方案,我们需要一个名为cmake的开源软件,可以在camke的官网:http://www.cmake.org/上下载到,首先转到其下载页面。

而Binary distributions处可以下载到cmake的执行文件,我们只需要下载到其执行文件即可,选择Windows (Win32 Installer)进行下载,点击这里直接下载:

http://www.cmake.org/files/v2.8/cmake-2.8.12.2-win32-x86.exe这一步就是下载和安装cmake,下载地址给出了,安装大家都会,就不过多讲。安装完成后,如果没有生成桌面快捷方式,在安装路径下,如D:\Program Files(x86)\CMake 2.8\bin处找到cmake-gui.exe运行。(或者直接下载压缩包文件,不用安装直接运行里面的cmake-gui.exe)

如果是64位系统,下载cmake-3.11.0-win64-x64.zip ,但是注意opencv-3.1.0软件,添加路径直到source

Win7x64+VS2013+opencv-3.1.0+cmake-3.11.0-win64-x64+重编译OpenCV_第1张图片

 2、使用cmake生成OpenCV源代码工程的解决方案

<1>运行cmake-gui

<2>指定OpenCV的安装路径

如下图,点击红色方框内的“Browse Source”按钮,在弹出的对话框中指定出OpenCV安装时源代码的存储路径。以当前最新版本的OpenCV 2.4.8安装在D:\Program Files下为例,则在此选择路径:D:\Program Files\opencv\sources其实我们可以发现,此路径下必须会有一个名为CMakeLists.txt的文件。

这个文件就是给cmake留下的配置文件,cmake可以根据这个配置文件,通过不同的编译器选择,来生成不同的解决方案,VisualStudio的编译器对应的就生成Visual Studio版的sln解决方案。

<3>指定解决方案的存放路径

点击红色方框内的“Browse Build”按钮,在弹出的对话框中指定我们存放生成的opencv解决方案的路径。比如F:/opencv。

<4>第一次Configure

第一次点击Configure按钮。会弹出编译器选择的对话框;首先选定“Use default native compilers”,然后,我们可以发现下拉列表中提供了几十种编译器给我们选择,因为我们安装了Visual Studio,会默认为我们选择好对应版本的Visual Studio编译器,比如Visual Studio 10(即待会儿会生成对应VS2010的sln解决方案)

确认无误后,单击“finish”按钮。

<5>第二次Configure

第一次配置完成之后,我们还需要进行第二次配置,于是再次点击“Configure”按钮。这次的配置是很快的,几秒钟就会再次出现“Configuring done”字样,并且红色的选中部分都正常了。

<6>点击Generate,大功告成

这样,就只剩下点一次Generate按钮,来生成最终的解决方案了。因为之前已经有过两次的configure过程,所以生成解决方案也将是非常的快。看到Generating done字样,就表示大功告成,可以去之前我们指定的F:\opencv下找寻我们生成的解决方案了。

PS:自从2.4.7版本起,opencv源代码就直接包含在了opencv的安装路径下,我们生成的sln工程,也只是连接到了opencv安装路径下的源文件而已,工程本身并不大。

 3、编译OpenCV源代码

      (1)打开刚刚生成的热乎乎的“OpenCV.sln”解决方案,看到一个庞大的工程映入眼帘——这可是一个包含了68个项目的解决方案:

Win7x64+VS2013+opencv-3.1.0+cmake-3.11.0-win64-x64+重编译OpenCV_第2张图片

这里小心,如果你是64位的,得在x64位下进行编译

 2在解决方案资源管理器里面右键ALL_BUILD(这个必须生成,否则会造成无法更新源代码或者从程序中进入不了源代码)点击生成;生成完成后再右键INSTALL,点击生成

debug状态下右击图中的INSTALL,点击生成。然后点击debug的开始按钮。

 然后在release下也进行一遍。

 2)编译OpenCV,就是得到了一些二进制的生成文件,如DLLLibexe。位于install目录下。该目录下的文件很重要。

Win7x64+VS2013+opencv-3.1.0+cmake-3.11.0-win64-x64+重编译OpenCV_第3张图片

 3)进入install目录后有很多文件。下面简要说明:

A、include目录:头文件

B、x64目录:而在lib目录下则是生成的各个模块的lib。Lib只是Dll的附带品,是DLL导出的函数列表文件而已

 4、配置OpenCV编译环境

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

D:… \install\x64\vc12\bin.dll文件都在这里)是用CMake生成的VS2010工程的所在目录。

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

   5、新建OpenCV工程

1、打开VS2013,新建控制台应用程序TestOpencv。

2、配置包含目录和库目录

添加新项目属性表

Win7x64+VS2013+opencv-3.1.0+cmake-3.11.0-win64-x64+重编译OpenCV_第4张图片

右击——属性->VC++目录->包含目录,添加

D: myopencv \install\include 

D: myopencv\ install\include\opencv2

D:myopencv\install\include\opencv                                                                 

属性->VC++目录->库目录,添加D:… install\x86\vc10\lib

注意:这些目录都是cmake生成的。(release下同样)

release下还应进行以下配置,选择多线程DLL/MD),否则运行会出错。

Win7x64+VS2013+opencv-3.1.0+cmake-3.11.0-win64-x64+重编译OpenCV_第5张图片

3、添加附加依赖项

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

文件在D:myopencv/lib/debug(release)下面

【注】  要将debugrelease下的lib分开添加,不然会出现imread无法读取数据的问题

对于配置方案为Debug的配置,添加:

opencv_calib3d310d.lib
opencv_core310d.lib
opencv_features2d310d.lib
opencv_flann310d.lib
opencv_highgui310d.lib
opencv_imgcodecs310d.lib
opencv_imgproc310d.lib
opencv_ml310d.lib
opencv_objdetect310d.lib
opencv_photo310d.lib
opencv_shape310d.lib
opencv_stitching310d.lib
opencv_superres310d.lib
opencv_ts310d.lib
opencv_videoio310d.lib
opencv_videostab310d.lib

对于Release配置,添加



opencv_calib3d310.lib
opencv_core310.lib
opencv_features2d310.lib
opencv_flann310.lib
opencv_highgui310.lib
opencv_imgcodecs310.lib
opencv_imgproc310.lib
opencv_ml310.lib
opencv_objdetect310.lib
opencv_photo310.lib
opencv_shape310.lib
opencv_stitching310.lib
opencv_superres310.lib
opencv_ts310.lib
opencv_videoio310.lib
opencv_videostab310.lib

二、修改源码

1、比如我想修改imshow()函数,使其显示图像的同时输出我们自己加的tfygg modify 这句话。我们找opencv_highgui模块中的window.cpp文件的257行,并修改为:

[cpp] view plain copy

void cv::imshow( const string& winname, InputArray _img )  

{  

    std::cout<<"-----------------------------------华丽分隔符----------------------------------"<

    std::cout<<"tfygg modify!"<

    std::cout<<"-----------------------------------华丽分隔符----------------------------------"<

    const Size size = _img.size();  

...  

}  

然后,加上头文件 #include

修改完,重新debug状态下右击图中的INSTALL,点击生成。然后点击debug的开始按钮。否则无法更新库中文件,你会发现改不了源程序

  添加测试代码

修改TestOpencv.cpp,代码为:

#include 

using namespace cv;
using namespace std;
int main()
{
	Mat img = imread("c:/pp.jpg");
	if(img.empty())
	{
		cout<<"error";
		return -1;
	}
	imshow("pp的靓照",img);
	waitKey();

	return 0;
}

将要显示的图片保存为c:/pp.jpg编译运行,显示出图片。

Win7x64+VS2013+opencv-3.1.0+cmake-3.11.0-win64-x64+重编译OpenCV_第6张图片


通过设置断点发现,能够跟踪进入Opencv内部函数

Win7x64+VS2013+opencv-3.1.0+cmake-3.11.0-win64-x64+重编译OpenCV_第7张图片

但是,有时候,会发现有些项目,还是得用以前的配置,可以采用,需要学习时候,通过修改路径来达成目的,花了我一晚上才只能这么妥协掉

通过Cmake系统环境变量   D:\myopencv\stall\x64\vc12\bin;C:\Program Files (x86)\Windows Kits\8.0\bin\x64;

原来的系统环境变量(不能是用户环境变量)

 D:\opencv\build\x64\vc12\bin;D:\opencv\build\x64\vc14\bin;C:\Program Files (x86)\Windows Kits\8.0\bin\x64;

你可能感兴趣的:(Opencv)