Opencv 完美配置攻略
2015-06-03 17:00
351 查看
Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)
2012年4月给同学写了篇傻瓜式的
VS2010+Opencv-2.4.0的配置攻略 结果没有想到,点击量一路飙升,固定在了Google “Opencv 配置” 关键词搜索的榜首。现在看看,已经过时了,版本升级后看不到ttb了,还有很多不足的地方需要修正。新电脑需要重新配置环境,结合新版本,再来写篇最完美的傻瓜教程,看能不能超过以前的那篇 :)
环境:Windows 8.1, Opencv 2.4.8, VS 2013.
欢迎转载或参考,但请尊重作者劳动成果,转载请注明出处,参考请引用链接!
http://my.phirobot.com/blog/2014-02-opencv_configuration_in_vs.html
目录
配置
下载安装软件
配置环境变量
编写Opencv的VS工程容属性表
新建VS测试工程
VS内配置Opencv
测试
进阶
直接文本编写Opencv x64 x86 Debug Release 全兼容属性表
通过VS界面建立自己的VS项目属性表
配置
[title3]下载安装软件[/title3]
下载
Opencv for Windows 最新版本,本文是 Opencv 2.4.8。双击后会出现解压提示,实际上就是“安装”了,路径填写为 D:/Program Files,然后确定。
Note
D:/Program Files 可以为任意自己希望opencv安装的路径,解压完成后,会在你所填目录中新增一个 opencv文件夹,里面就是opencv的所有内容了。例如按照我的路径,解压完成后Opencv就在
D:/Program Files/opencv 里面了。
下载 VS 2013,并安装。(自己找破解吧)
[title3]配置环境变量[/title3]
在系统变量里面新建变量,名为 OPENCV ,值为自己解压opencv路径下的build路径,如
D:\Program Files\opencv\build。
Tip
这一步是方便以后如果opencv路径改变了,只需要修改此变量就可以了,而不必做大范围修改。
在系统变量里面编辑 Path 变量,在末尾添加
;%OPENCV%\x86\vc12\bin 。
Note
x86和x64分别表示32bit和64bit的VS工程,根据自己的工程来修改,否则虽编译成功但会运行错误;vc10, vc11, vc12 分别表示VS2010, VS2012, VS2013的Visual Studio使用的编译器版本,根据自己的VS版本来填写正确的编译器版本号。
Note
多谢 @玄影游侠 的提醒,环境变量设置好后最好注销(重启)一下系统,可能有的系统环境变量不会立即生效,而导致一系列路径相关的问题。
[title3]编写Opencv的VS工程容属性表[/title3]
在opencv根目录(例如 D:\Program Files\opencv)下新建VS属性表文件
opencv248.props,或者直接下载我的
opencv248.props 属性表文件。
opencv248.props 文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<IncludePath>$(OPENCV)\include;$(IncludePath)</IncludePath>
<LibraryPath Condition="'$(Platform)'=='Win32'">$(OPENCV)\x86\vc12\lib;$(LibraryPath)</LibraryPath>
<LibraryPath Condition="'$(Platform)'=='X64'">$(OPENCV)\x64\vc12\lib;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup>
<Link Condition="'$(Configuration)'=='Debug'">
<AdditionalDependencies>opencv_calib3d248d.lib;opencv_contrib248d.lib;opencv_core248d.lib;opencv_features2d248d.lib;opencv_flann248d.lib;opencv_gpu248d.lib;opencv_highgui248d.lib;opencv_imgproc248d.lib;opencv_legacy248d.lib;opencv_ml248d.lib;opencv_nonfree248d.lib;opencv_objdetect248d.lib;opencv_ocl248d.lib;opencv_photo248d.lib;opencv_stitching248d.lib;opencv_superres248d.lib;opencv_ts248d.lib;opencv_video248d.lib;opencv_videostab248d.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<Link Condition="'$(Configuration)'=='Release'">
<AdditionalDependencies>opencv_calib3d248.lib;opencv_contrib248.lib;opencv_core248.lib;opencv_features2d248.lib;opencv_flann248.lib;opencv_gpu248.lib;opencv_highgui248.lib;opencv_imgproc248.lib;opencv_legacy248.lib;opencv_ml248.lib;opencv_nonfree248.lib;opencv_objdetect248.lib;opencv_ocl248.lib;opencv_photo248.lib;opencv_stitching248.lib;opencv_superres248.lib;opencv_ts248.lib;opencv_video248.lib;opencv_videostab248.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>
这份属性表为opencv2.4.8的VS2013工程属性表,兼容64位和32位平台,兼容Debug和Release配置。详细解释看后文,后面在VS工程中配置Opencv只需要导入这份属性表就可以了。
Note
如果不是VS2013,或者Opencv版本不是2.4.8,一定要修改部分参数才能使用。详细修改办法看后文。
[title3]新建VS测试工程[/title3]
文件 -> 新建 -> 项目 -> Visual C++ -> Win32 控制台应用程序(输入名称test)
确定 -> 下一步 -> 附加选项选“空项目” -> 完成
[title3]VS内配置Opencv[/title3]
这里用VS属性表的方式将Opencv配进工程,每次只需要添加属性表即可完成配置,比手工界面配置方便很多。
属性管理器 -> 右键 "test"(工程名) -> 添加现有属性表
找到之前新建或者下载的属性表( D:\Program Files\opencv\opencv248.props ),添加进工程
[title3]测试[/title3]
解决方案资源管理器 -> 源文件(右键)-> 添加 -> 新建项
Visual C++ -> C++文件:输入名称test点添加
粘贴下面的代码,保存:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("pp.jpg");
if (img.empty())
{
cout << "error";
return -1;
}
imshow("pp的靓照", img);
waitKey();
return 0;
}
把自己的靓照改名为pp.jpg,然后放到工程项目的test文件夹里面(是里面那个test文件夹)
按F5调试程序,如果你的图片出来了就OK了。
进阶
[title3]直接文本编写Opencv x64 x86 Debug Release 全兼容属性表[/title3]
新建属性表文档 opencv248.props,填写下面的xml内容并保存:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<IncludePath>$(OPENCV)\include;$(IncludePath)</IncludePath>
<LibraryPath Condition="'$(Platform)'=='Win32'">$(OPENCV)\x86\vc12\lib;$(LibraryPath)</LibraryPath>
<LibraryPath Condition="'$(Platform)'=='X64'">$(OPENCV)\x64\vc12\lib;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup>
<Link Condition="'$(Configuration)'=='Debug'">
<AdditionalDependencies>opencv_calib3d248d.lib;opencv_contrib248d.lib;opencv_core248d.lib;opencv_features2d248d.lib;opencv_flann248d.lib;opencv_gpu248d.lib;opencv_highgui248d.lib;opencv_imgproc248d.lib;opencv_legacy248d.lib;opencv_ml248d.lib;opencv_nonfree248d.lib;opencv_objdetect248d.lib;opencv_ocl248d.lib;opencv_photo248d.lib;opencv_stitching248d.lib;opencv_superres248d.lib;opencv_ts248d.lib;opencv_video248d.lib;opencv_videostab248d.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<Link Condition="'$(Configuration)'=='Release'">
<AdditionalDependencies>opencv_calib3d248.lib;opencv_contrib248.lib;opencv_core248.lib;opencv_features2d248.lib;opencv_flann248.lib;opencv_gpu248.lib;opencv_highgui248.lib;opencv_imgproc248.lib;opencv_legacy248.lib;opencv_ml248.lib;opencv_nonfree248.lib;opencv_objdetect248.lib;opencv_ocl248.lib;opencv_photo248.lib;opencv_stitching248.lib;opencv_superres248.lib;opencv_ts248.lib;opencv_video248.lib;opencv_videostab248.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>
这份属性表为opencv2.4.8的VS工程属性表,兼容64位和32位平台,兼容Debug和Release配置。
很容易看出如何修改:
如果你没有配置%OPENCV%环境变量,则只需要修改 IncludePath 和
LibraryPath 所指三个标签,用绝对路径代替 $(OPENCV);
如果你的Visual Studio版本与我的不同,则需要修改 LibraryPath 所指两个标签的将编译器版本号,VS2010对应vc10,VS2012对应vc11,VS2013对应vc12;
如果你的opencv与我的版本不同,只需要将两个 AdditionalDependencies 标签内的所有lib的版本号修正即可(所有的248改为自己的版本号),并在opencv的lib目录下检查一下lib名称是否对应。
[title3]通过VS界面建立自己的VS项目属性表[/title3]
网上一大堆,就不具体说明了。与自己文本编写属性表不同的是,通过界面新建的属性表要为不同的配置单独建立,导入的时候也要针对配置单独导入。
属性管理器 ->展开 项目名 -> 右键 Debug | Win32 -> 添加新项目属性表
添加属性表,取名为“opencv248x86.Debug.props”。
属性管理器 ->展开 Debug | Win32 -> 双击 新建的 opencv248x86.Debug 打开属性页面 -> VC++ 目录
编辑 包含目录 一栏,添加opencv的include路径,例如我的是
D:\Program Files\opencv\build\include;编辑 库目录 一栏,添加opencv的lib路径,例如我的是
D:\Program Files\opencv\build\x86\vc12\lib 。
Note
将光标移到编辑框会在右边出现小下拉三角,点击小三角,再选择编辑打开路径选择窗口选择对应路径。如果直接粘贴则粘贴在现有内容前面用分号隔开,否则会失去继承性。
Note
库目录 一栏选择opencv的lib路径时,如果工程是64位则选择opencv的x64目录,如果是32位则选择x86。Visual Studio的版本与编译器版本号的对应关系是:VS2010 -> vc10, VS2012 -> vc11, VS2013 -> vc12,选择目录的时候注意自己的VS工程版本。
在属性页面 -> 链接器 -> 输入 -> 附加依赖项 -> 编辑。添加下面的lib列表:
opencv_calib3d248d.lib
opencv_contrib248d.lib
opencv_core248d.lib
opencv_features2d248d.lib
opencv_flann248d.lib
opencv_gpu248d.lib
opencv_highgui248d.lib
opencv_imgproc248d.lib
opencv_legacy248d.lib
opencv_ml248d.lib
opencv_nonfree248d.lib
opencv_objdetect248d.lib
opencv_ocl248d.lib
opencv_photo248d.lib
opencv_stitching248d.lib
opencv_superres248d.lib
opencv_ts248d.lib
opencv_video248d.lib
opencv_videostab248d.lib
确定两次后完成Debug版本的属性表编辑。
同样依照上面的步骤编写Release版本的属性表,唯一不同的是在“附加依赖项”中填入的是Release版本的lib列表:
opencv_calib3d248.lib
opencv_contrib248.lib
opencv_core248.lib
opencv_features2d248.lib
opencv_flann248.lib
opencv_gpu248.lib
opencv_highgui248.lib
opencv_imgproc248.lib
opencv_legacy248.lib
opencv_ml248.lib
opencv_nonfree248.lib
opencv_objdetect248.lib
opencv_ocl248.lib
opencv_photo248.lib
opencv_stitching248.lib
opencv_superres248.lib
opencv_ts248.lib
opencv_video248.lib
opencv_videostab248.lib
Tip
*d.lib的是Debug版本lib,*.lib的是Release版本lib。
Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV
PS:[b]请参考最新的《Opencv 完美配置攻略 2014 (Win8.1 +Opencv 2.4.8 + VS 2013)》,绝对给力!由于Opencv版本升级,大多人开始用新版本VS,等等,这篇已经过时了,而且当时没有在文中加入更合适的简介的配置方法,所以有一些东西不再适用。重写一篇,,无论是Win7还是Win8,无论是VS2010, VS2012, 还是VS2013,无论是Opencv 2.x.x,方法都是一样的,只是配置思路和操作流程不同而已。[/b]
如果想重新编译Opencv,可以参考本文,不过新版本也许不用配置ttb了吧,没试过。如果有需求再玩玩自己编译的。
重编译的好处:可以调试的时候看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位系统,装有VS2012,以编译32位的Opencv库为例,要编译64位库需要注意选择64位的配置。
1 下载Opecv,CMake,TBB并安装
下载OpenCV2.4.3:http://opencv.org/downloads.html,解压到D:\Program Files\下载CMake2.8.10:http://www.cmake.org/cmake/resources/software.html,安装
下载tbb41_20121003oss:http://threadingbuildingblocks.org/download,解压到D:\Program Files\
2 配置TBB环境变量
Path里添加:D:\Program Files\tbb41_20121003oss\bin\ia32\vc11bin目录内ia32表示要编译32位工程,intel64表示要编译64位工程,vc11表示VS版本为2012
3 用CMake生成VS2012的OpenCV工程
新建文件夹OpenCVProject:D:\Program Files\OpenCVProject(用于存放自己的OpenCV编译工程)。打开CMake,"Browse Source..."选择Opencv的目录D:/Program Files/opencv(内有CMake的组态档"CMakeLists.txt"),"Browse Build..."选择刚才自己新建的工程存放路径"D:\Program Files\OpenCVProject"。点击Configure按钮,在出现的对话框中选择Visual Studio 11(如果编译64位dll注意选择64位VS11配置),默认Use default native
compilers,Finish继续。
稍等片刻出现该图
第一轮配置完后往下拉,勾选WITH_TBB,点击Configure进入第二轮。
修改红色部分TBB路径为D:/Program Files/tbb41_20121003oss/include,再次点击Configure;继续点击Configure,直到没有红色标记。
点击Generate生成Opencv工程,退出CMake。
4 用Opencv VS2012工程编译生成自己的Opencv库
打开生成的Opencv工程,选择CMakeTargets下INSTALL,右键“生成”,生成Debug版dll,lib。切换编译模式为Release模式,重复上一步生成Release版dll,lib。
上面两步后就能看到最终Debug版和Release版的dll,lib,以及文档目录doc,头文件目录include(bin内为两个版本dll,lib内为两个版本lib)。
目标达成,在D:\Program Files\OpenCVProject\install内有我们所要的dll,lib,include头文件,有了这些就可以进行Opencv开发与源码跟踪了。跟dll关联的源代码在Opencv安装目录D:\Program Files\opencv\modules内。
我习惯将将D:\Program Files\OpenCVProject\install拷贝到D:\Program Files\opencv\下,并将install重命名为vc11x86。而此时D:\Program Files\OpenCVProject没有用了,但是不能删除,否则无法跟踪源码,占用6G多空间,可以通过VS2012的“清理解决方案”来减到3G多。
5 配置Opencv开发环境
在环境变量Path里添加:D:\Program Files\opencv\vc11x86\bin。6 编写测试工程
6.1 打开VS2012,新建控制台应用程序TestOpencv。
6.2 配置包含目录和库目录
项目->xxx属性->VC++目录->包含目录,添加D:\Program Files\opencv\vc11x86\include项目->xxx属性->VC++目录->库目录,添加D:\Program Files\opencv\vc11x86\lib
项目->xxx属性->链接器->输入->附加依赖项,添加lib文件名列表如下图。
对于配置方案为Debug的配置,添加:
opencv_calib3d243d.lib opencv_contrib243d.lib opencv_core243d.lib opencv_features2d243d.lib opencv_flann243d.lib opencv_gpu243d.lib opencv_highgui243d.lib opencv_imgproc243d.lib opencv_legacy243d.lib opencv_ml243d.lib opencv_nonfree243d.lib opencv_objdetect243d.lib opencv_photo243d.lib opencv_stitching243d.lib opencv_ts243d.lib opencv_video243d.lib opencv_videostab243d.lib
对于Release配置,添加
opencv_calib3d243.lib opencv_contrib243.lib opencv_core243.lib opencv_features2d243.lib opencv_flann243.lib opencv_gpu243.lib opencv_highgui243.lib opencv_imgproc243.lib opencv_legacy243.lib opencv_ml243.lib opencv_nonfree243.lib opencv_objdetect243.lib opencv_photo243.lib opencv_stitching243.lib opencv_ts243.lib opencv_video243.lib opencv_videostab243.lib
Opencv的dll和lib中,末尾带d的就是Debug版本。
6.3 添加测试代码
修改TestOpencv.cpp,代码为:[code]#include "stdafx.h" #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内部函数。
相关文章推荐
- [转]使用window.open替代window.ShowModalDialog,完成子页面和父页面之间的传值
- centos7 通过kvm+vnc 实现远程桌面虚拟化和创建windows、Linux虚拟机
- linux md5sum 的用法
- Reports Never Stop Loading With VS 2010
- shell脚本抓取问题进程(守护进程)
- Linux命令 bc - 浮点计算器、进制转换
- os.popen与os.system区别
- CentOS开放80、22、8080端口操作
- Linux下踢用户下线
- centos7下配置dns服务器
- Hadoop中-put和-copyFromLocal的区别
- 在Ubuntu等64为Linux下安装google android
- UVa 10934 Dropping water balloons
- Linux netstat命令详解
- heartbeat(v2)实现LAMP提供wordpress博客站点高可用模型实践
- 在Mac系统上安装Tomcat
- apache 配置虚拟主机。
- previous operation has not finished
- 使用Nginx提供web服务
- zabbix监控percona容器