当配置过程中,打开了VS2013,同时发现系统变量配错了,回头改了系统变量,那么切记要重启VS2013,因为VS2013在启动时就加载了系统变量,所以如果打开着VS2013回头更改了系统变量,此时VS2013已经加载了系统变量,更改的系统变量没有立即生效。如果不行重启试试也行,我就是最后重启后,配置完全没动,错误就消失了,经分析才知道是系统变量没有立即生效的原因。这么白痴的错误写在这里,是写给当时犯错的自己。

  1. 下载OpenCV3.0.0
    到OpenCV官网下载对应版本http://opencv.org/downloads.html,然后安装到相应目录,本例是安装到D:\opencv300目录中。
  2. 配置环境变量
    2.1配置系统变量,首先找到“计算机”,右键“属性”–>“高级系统设置”–>“环境变量”–>“系统变量”。
  3. vs win32项目配置opencv_vs win32项目配置opencv

  4. 2.2在系统变量中新建一个变量”OPENCV”,值为”D:\opencv300\opencv\build”,即找到OpenCV安装目录下的build的目录,因你安装目录不同而不同,切记复制
  5. vs win32项目配置opencv_vs win32项目配置opencv_02

  6. 2.3在系统变量Path末尾添加“;%OPENCV%\x86\vc12\bin;%OPENCV%\x64\vc12\bin”,为了适应Win32和x64平台之间的切换,所以同时添加了两个bin目录。注意那个分号,而最后又没有分号。其他版本VS也是类似的,vc12对应vs2013,vc11对应vs2012,vc10对应vs2010。
  7. vs win32项目配置opencv_系统变量_03

  8. OpenCV配置文件opencv300.props
    新建一个后缀为.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;$(OPENCV)\include\opencv;$(OPENCV)\include\opencv2;$(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_ts300d.lib;opencv_world300d.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <AddtionalLibraryDirectories>%(AddtionalLibraryDirectories)</AddtionalLibraryDirectories>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup>
    <Link Condition="'$(Configuration)'=='Release'">
      <AdditionalDependencies>opencv_ts300.lib;opencv_world300.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <AddtionalLibraryDirectories>%(AddtionalLibraryDirectories)</AddtionalLibraryDirectories>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>

对这个文件需要说的有几点,虽然粘在这了,如果大家对于XML配置文件有所了解的话,阅读节点名字就很清楚其作用。


3.1<IncludePath>这个节点包含头文件目录设置,注意$(OPENCV)变量,这个变量就是第二步新建的系统变量,为了适应性,包含3个include目录,大家可以自己打开相应目录查看一下会更加清楚。


3.2<LibraryPath>这个节点包含lib文件目录设置,可以看出为了适应性,通过条件来判断是win32还是x64的应用来包含对应的lib目录,这里可能有点多余,因为之前有说过vs2013是32位版本的,但这里只是为了适应性。


3.3<Link Condition="'$(Configuration)'=='Debug'"><Link Condition="'$(Configuration)'=='Release'">通过条件来判断是Debug版本的项目还是Release版本的项目,相应包含的lib会有所不一样,仔细观察可以看到Debug会在每个lib文件名中加入d字母,例如opencv_ts300d.libopencv_ts300.lib的区别。其实包含那么多lib是多余的,在OpenCV3.0.0有所改变,只需要两个lib即可,其为opencv_ts300d.lib;opencv_world300d.lib,Release版本对应去掉d字母即可。再啰嗦一点,这些lib都是步骤3.2中lib目录下面的lib文件,千万不要胡乱复制,不嫌麻烦最好自己一个一个对应添加一遍,仅需要一遍即可,以后只需添加这个配置文件就完成了OpenCV的配置,我就是一个一个对应添加过才是清楚其文件所需。


4. 为项目添加OpenCV配置文件opencv300.props

创建一个Win32控制台应用程序, 然后在“属性管理器”中添加步骤3所建立的OpenCV配置文件。

vs win32项目配置opencv_win7_04


当需要改为Release版本时,只需要在Release版本中添加配置文件即可。


5. 测试代码及结果

#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  

using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
    // 读入一张图片,图片来源OpenCV的数据 ...opencv\sources\samples\data\目录下  
    Mat img = imread("lena.jpg");
    // 创建一个名为 "Demo"窗口  
    namedWindow("Demo");
    // 在窗口中显示图片  
    imshow("Demo", img);
    // 等待6000 ms后窗口自动关闭  
    waitKey(6000);
    return 0;
}

vs win32项目配置opencv_VS2013_05