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。
首先,要用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
2、使用cmake生成OpenCV源代码工程的解决方案
<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解决方案。
点击红色方框内的“Browse Build”按钮,在弹出的对话框中指定我们存放生成的opencv解决方案的路径。比如F:/opencv。
第一次点击Configure按钮。会弹出编译器选择的对话框;首先选定“Use default native compilers”,然后,我们可以发现下拉列表中提供了几十种编译器给我们选择,因为我们安装了Visual Studio,会默认为我们选择好对应版本的Visual Studio编译器,比如Visual Studio 10(即待会儿会生成对应VS2010的sln解决方案)
第一次配置完成之后,我们还需要进行第二次配置,于是再次点击“Configure”按钮。这次的配置是很快的,几秒钟就会再次出现“Configuring done”字样,并且红色的选中部分都正常了。
这样,就只剩下点一次Generate按钮,来生成最终的解决方案了。因为之前已经有过两次的configure过程,所以生成解决方案也将是非常的快。看到Generating done字样,就表示大功告成,可以去之前我们指定的F:\opencv下找寻我们生成的解决方案了。
PS:自从2.4.7版本起,opencv源代码就直接包含在了opencv的安装路径下,我们生成的sln工程,也只是连接到了opencv安装路径下的源文件而已,工程本身并不大。
3、编译OpenCV源代码
(1)打开刚刚生成的热乎乎的“OpenCV.sln”解决方案,看到一个庞大的工程映入眼帘——这可是一个包含了68个项目的解决方案:
这里小心,如果你是64位的,得在x64位下进行编译
(2)在解决方案资源管理器里面右键ALL_BUILD,(这个必须生成,否则会造成无法更新源代码或者从程序中进入不了源代码)点击生成;生成完成后再右键INSTALL,点击生成
在debug状态下右击图中的INSTALL,点击生成。然后点击debug的开始按钮。
然后在release下也进行一遍。
2)编译OpenCV,就是得到了一些二进制的生成文件,如DLL和Lib、exe。位于install目录下。该目录下的文件很重要。
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、配置包含目录和库目录
右击——属性->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),否则运行会出错。
3、添加附加依赖项
在链接器->输入->附加依赖项处添加:
文件在D:myopencv/lib/debug(release)下面
【注】 要将debug与release下的lib分开添加,不然会出现imread无法读取数据的问题
对于配置方案为Debug的配置,添加:
opencv_calib3d310d.libopencv_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::endl;
std::cout<<"tfygg modify!"<<std::endl;
std::cout<<"-----------------------------------华丽分隔符----------------------------------"<<std::endl;
const Size size = _img.size();
...
}
然后,加上头文件 #include<iostream>
修改完,重新在debug状态下右击图中的INSTALL,点击生成。然后点击debug的开始按钮。否则无法更新库中文件,你会发现改不了源程序
添加测试代码
修改TestOpencv.cpp,代码为:
#include <opencv2\opencv.hpp>
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,编译运行,显示出图片。
通过设置断点发现,能够跟踪进入Opencv内部函数
但是,有时候,会发现有些项目,还是得用以前的配置,可以采用,需要学习时候,通过修改路径来达成目的,花了我一晚上才只能这么妥协掉
通过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;
上一篇: solr
下一篇: SSH远程服务器免密登录
推荐阅读
-
Ubuntu 17.04系统下源码编译安装opencv的步骤详解
-
使用python opencv对目录下图片进行去重的方法
-
Windows编译OpenCV4Android解决undefined reference to std错误
-
[环境配置]Ubuntu 16.04 源码编译安装OpenCV-3.2.0+OpenCV_contrib-3.2.0及产生的问题
-
ubuntu16.04编译安装opencv3.4.6
-
linux下编译opencv
-
ubuntu下编译安装opencv的方法
-
win10下Opencv源码编译支持CUDA加速的Python环境,超级详细教程!
-
C1622 Adaboost 正面人脸识别; 必须先装上OPENCV,编译环境乃是
-
opencv编译出错 ../../3rdparty/lib/libzlib.a: error adding symbols: Bad value