OpenCV3.1.0+VS2013配置+Win10(64位)

【环境】VS2013和MATLAB相互调用混合编程

Matlab 2016a和VS2013混合Dll编程步骤

更换了硬盘之后,重新配置了一次OpenCV,这次在下载的时候,发现有OpenCV3.1.0版本了,所以我就下载了截止到目前为止最新的版本进行配置。

PS:我之前使用的是,OpenCV3.0.0+VS2013。具体的配置可以参考一下两个链接:

http://blog.csdn.net/hyichao_csdn/article/details/41723825

http://jingyan.baidu.com/article/64d05a0245aa70de55f73b12.html

虽然配置OpenCV不是一件很繁琐的事情,但是因为不是很了解每一步的作用,所以有时候一不小心就会出错。下面就跟大家分享一下我配置的方法以及一些技巧。

在这之前,像做饭一样,我们得先准备好材料:

VS2013+OpenCV3.1.0

OpenCV3.1.0可以到OpenCV的官网上面下载:

http://opencv.org/

下载完成后,得到的是一个.exe:

接着运行它即可得到我们需要的文件夹。

-------------------------------------------------------上面是一些准备工作,下面正式开始-----------------------------------------------------

我想介绍两种方法,前一种比较low,每次使用VS新建一个工程时,需要重新配置;后一种效率比较高,每次使用VS的时候只需要添加现有的属性表(不清楚属性表是什么没关系哈,耐心往下看)即可,本文有一些截图过于细节,目的是为了方便初次配置的朋友,之前配置过的朋友可以跳着看哈。

(一)先来介绍第一种方法。

1、配置环境变量。

我的电脑(右键)——属性——高级系统设置——环境变量——Path(双击)

在原有的Path后面加上分号;然后加上D:/Work_Software/OpenCV3.1/opencv/build/x64/vc12/bin

注意加上的路径是你的电脑上build/x64/vc12/bin所对应的路径,不要照搬我上面的路径。
        再注意最后不用加分号,分号只加在路径之间,而且切忌将原来的Path都删除!!!
        PS:这个bin文件夹是什么来头呢?里面有一些dll文件,也就是动态链接库,可以理解成是opencv里面用到的函数的实现。

(初次配置OpenCV的朋友可以忽略此括号中的话,PS:配置过3.1.0之前版本的朋友会发现,3.1.0版本中build文件夹中只有x64文件夹,而没有了x86文件夹。也就是说,在配置3.1.0版本之后,使用VS进行OpenCV相关的编程的时候,只能使用64位的编译器,而不能使用32位的编译器了。这与之前版本有所不同,之前是,32位系统只能使用32位的编译器,而64位的系统可以使用32位或者64位的编译器。这个是我自己琢磨出来的,如果有错误的地方,欢迎指正。)
        好了,到这里,环境变量就配置完成了,有的说法是,环境变量配置完成后需要重启一下电脑才能生效,这个没有亲测过,保险起见的话可以重启一下,顺便放松一下眼睛~~~~

2、VS中的配置。

(1)首先,打开VS2013并新建工程如下:

(2)接着,在源文件处新建一个main.cpp文件如下:

这样就完成了新建工程的任务,接下来就要对我们新建的工程进行设置了。下面才是关键:

(3)将32位编译器Win32改为64位编译器x64,操作如下图:

(4)接下来,对工程test1进行设置,总共有三个东西需要设置:“包含目录”“库目录”以及“附属依赖项”,一个一个来。

第一,编辑包含目录如下:

选择build文件夹中的include文件夹操作如下:

设置好包含目录之后,我们后面的使用中就可以在我们程序的开头将与OpenCV有关的头文件通过“#include<opencv2/opencv.hpp>”这样的方式包含进来了。

PS:有的教程不仅仅将include文件夹的路径添加到包含目录中,而且将include文件夹中opencv和opencv2这两个文件夹的路径也添加到包含目录中了。这一步可有可无,区别在于,如果我将opencv2文件夹的路径也添加到包含目录中,那么我在我的程序开头就可以将上面说到的“#include<opencv2/opencv.hpp>”改写成“#include<opencv.hpp>”,编译器可以自己跑到opencv2文件夹中查找。

第二,编辑库目录,类似于编辑包含目录,将/build/x64/vc12/lib的路径添加到库目录中如下图(容易知道,lib也就是library库的缩写):

第三,添加附属依赖项如下:

需要注意的是,我们这里添加的附属依赖项是以“d”结尾的,也即是Debug模式的,如实想用Release模式的话,则将上面的“opencv_world310d.lib”改为“opencv_world310.lib”即可。

配置过之前版本的朋友会发现,以前2点几版本的OpenCV需要添加一大堆的附属依赖项,到了3.0的时候仅仅需要两个.lib,到了3.1.0的时候,就只剩下一个了!!!

好了,到此为止,第一种方法就介绍完了,只要在新建的main.cpp文件中运行一下下面的测试代码:

#include<opencv2/opencv.hpp>

using namespace cv;

int main()

{

Mat picture = imread("F://My_Desktop//1st//no_phone//1.jpg");

imshow("测试程序", picture);

waitKey(0);

}

就可以欣赏到我们自己的劳动成果啦!imread后面的路径是所要显示的照片的路径,这里使用了“//”而不是“/”是因为“/”在C++中有转义的作用,所以要用两个“/”即“//”。

当然在前面也说到了,用这种方法的缺点是每次使用VS新建一个工程的时候,都要重复上面的2(1)-2(4)。所以,下面我将要介绍第二种方法!

---------------------------------------------------------第二种方法-----------------------------------------------------------------

(二)第二种方法。

1、配置环境变量。同上面的方法一样,如果在使用方法一的时候已经配置过了,那么这一步可以跳过。

2、VS中的配置。

(1)、(2)同(一)2(1)-(2)

(3)添加新项目属性表。

打开属性管理器:

这时候出现的窗口是下面这样的,这是使用32位编译器的情况,如上面说到的,我们要将编译器改为64位的:

这时候需要打开配置管理器,新建x64:

这样操作之后,属性管理器窗口多出了两个东西如下:

接下来在Debug|x64或者Relase|x64右键(这里以Debug为例):

添加属性表,名称改成一个方便自己记忆的名字,我这里用的是opencv_3.1.props

接着,在我们新添加的属性表处右键选择属性:

然后就得到了一个很亲切的窗口,没错,这个在上面出现过,设置的过程也跟上面一样。按照上面的(一)2(4)所说的方法设置好“包含目录”“库目录”以及“附属依赖项”。

好了,当你设置好点下“确定”之后,你同样可以在main.cpp中输入(一)中给出的测试程序,运行即可。

下面是重点,当你下一次再打开VS新建工程的时候,你需要做的仅仅是下面的事情:

第一步:新建工程;

第二步:打开配置管理器(上面有说到如何打开),将Win32改为x64;

第三步:在属性管理器中,添加现有属性表,将上面制作好的opencv_3.1.props添加进来如下图所示。

这样就大功告成啦!!!接着在新建的main.cpp文件中就可以编程了,如果你不嫌烦的话,可以在试一下上面的测试程序。

谢谢你耐心看完它,希望能对你有所帮助!

转载:http://www.th7.cn/Program/cp/201603/773871.shtml
 
 
 
 

Visual Studio和MATLAB混合编程,有两种方法:

  1 MATLAB调用C程序;

  2 VS调用MATLAB(目前见到的都是VS,其他编译器如codeblocks,或不提供这项功能);

前一种是用MATLAB的mex命令调用VS或其他编译器,将以一定方式编写出的C文件编译成.mexw32(针对win32)或者.mexw64(针对win64),然后MATLAB就可以用调用动态链接库的方式,调用C程序。这一过程中,只需要在安装好编译器的前提下,执行:

mex -setup

mbuild -setup

并按照提示按部就班地帮助MATLAB找到C编译器就可以了。遇到MATLAB找不到Visual Stdio的情况时,可按照官方网站提供的方法,例如如果MATLAB找不到已安装的Visual Studio 2013,则在

http://www.mathworks.com/matlabcentral/fileexchange/44408-matlab-mex-support-for-visual-studio-2013--and-mbuild-

下载官方提供的文件,按照README的要求将文件复制到指定目录下即可。

README:

The files
* msvc120engmatopts.bat
* msvc120opts.bat
* msvc120opts.stp
should be copied to C:\Program Files\MATLAB\R2013a\bin\win64\mexopts . The files
* msvc120compp.bat
* msvc120compp.stp
should be copied to C:\Program Files\MATLAB\R2013a\bin\win64\mbuildopts .

另一种是反过来,由VS去调用MATLAB,因为归根结底,许多底层的代码都依赖于C/C++语言,如果要使用MATLAB进行实时的数据处理,那么必然是使用C/C++(从操作系统内核、套接字,或者设备)获取数据,再调用MATLAB进行处理。切入正题:

1   首先正确地安装好环境,如下是我使用的环境:

    x86

    Windows 7 

    VS2013

    MATLAB R2010a(安装目录为D:\MATLAB\R2010a)。

2    下面是VS路径的包含

右键项目—属性—VC++目录

               —包含目录,添加D:\MATLAB\R2010a\extern\include;(注意分号)

               —库目录,添加D:\MATLAB\R2010a\extern\lib\win32\microsoft;

       —C/C++(—常规),添加附加包含目录D:\MATLAB\R2010a\extern\include\;

          —链接器

               —常规,添加附加库目录D:\MATLAB\R2010a\extern\lib\win32\microsoft;

               —输入,添加附加依赖项:libeng.lib;libmat.lib;libmex.lib;libmx.lib;mclmcrrt.lib;mclmcr.lib;

3   系统环境变量:PATH里添加D:\MatLab\R2010a\bin\win32; 帮助VS找到MATLAB的提供的动态链接库。

4   注册MATLAB服务器:cmd,在D:\MatLab\R2010a\bin目录下运行

matlab \regserver

大概是开启MATLAB Server模式,接收VS的调用请求吧。

5  下面写C/C++程序:

 添加头文件以及动态链接库

#include "engine.h"

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libeng.lib")
#pragma comment(lib, "libmx.lib")
#pragma comment(lib, "libmat.lib")

打开引擎(引擎用来调用MATLAB):

Engine* pEng = NULL;

    if (!(pEng = engOpen(NULL)))
{
printf("Open matlab enging fail!");
getchar();
return -1;
}

引擎打开函数openEng调用完毕后一定要检查是否打开成功(类似云malloc函数,申请完内存一定要检查是否申请成功),因为就算pEng==NULL,在函数engEvalString执行中也不会抛出异常的,只会导致engGetVariable执行失败,当然咯,因为根本没执行嘛,哪来的variable?

然后可以调用啦,一切的matlab命令都可以通过下面这个函数传入MATLAB执行,类似于Linux的系统调用exec("...")和windows的system("..."):

engEvalString(pEng, "x=0:0.01:pi); y=sin(x); plot(x, y)");

如果要得到MATLAB的返回结果:

engEvalString(pEng, "x=0:0.02:3.14; y=sin(x); plot(x, y)");
mxArray *x= engGetVariable(pEng, "x");
mxArray *y= engGetVariable(pEng, "y");
double * _x = mxGetPr(x);
double * _x = mxGetPr(y);
//此时_x为x数组,_y为y数组

由于MATLAB里面,数据都将看成矩阵来处理,因此返回结果也是以Array的方式返回,如果是单个值,就是array[0],否则为array[0..n-1],如何得到n呢?还是用函数engGetVariable咯,可以先执行n=length(x),再将n传回。

 执行结束后,记得关闭引擎

if(pEng)
engClose(pEng);

注意一旦关闭,就不能再使用pEng了,否则会抛出异常。并且,在关闭引擎后,原本在执行过程中得到的figures也会关闭。在我的课题里面,引擎是在程序开始时打开,程序最终退出时才关闭。

6   如果在编译期间出现“找不到XXX.lib”的情况,检查路径是否正确添加,不然就直接复制lib文件到system32吧。。。

7   如果编译链接通过,运行起来还是有异常,检查matlab server是否有注册成功:运行matlab /regserver,再试一试。

8   因为调用MATLAB执行的命令是以字符串形式传入的,千万注意字符串里面的特殊符号、空格。特殊符号前面需要加上反斜杆,若有空格,依据MATLAB的语法,应使用单引号。例如:

engEvalString(pEng,"cd \'E:\\Desktop\\Alilce and Bob\' ");

9  如果遇到ERROR LNK2019,如:

错误    1    error LNK2019: 无法解析的外部符号 _mxGetPr,该符号在函数 "void __cdecl dataProcessing(struct engine *)" (?dataProcessing@@YAXPAUengine@@@Z) 中被引用    C:\Users\OurEDA\Desktop\Ahotspot\Models\RSS CSI Models\matlab\main.obj    matlab
错误 2 error LNK2019: 无法解析的外部符号 _mxDestroyArray,该符号在函数 "void __cdecl dataProcessing(struct engine *)" (?dataProcessing@@YAXPAUengine@@@Z) 中被引用 C:\Users\OurEDA\Desktop\Ahotspot\Models\RSS CSI Models\matlab\main.obj matlab
错误 3 error LNK2019: 无法解析的外部符号 _engEvalString,该符号在函数 "void __cdecl dataProcessing(struct engine *)" (?dataProcessing@@YAXPAUengine@@@Z) 中被引用 C:\Users\OurEDA\Desktop\Ahotspot\Models\RSS CSI Models\matlab\main.obj matlab
错误 4 error LNK2019: 无法解析的外部符号 _engOpen,该符号在函数 _main 中被引用 C:\Users\OurEDA\Desktop\Ahotspot\Models\RSS CSI Models\matlab\main.obj matlab
错误 5 error LNK2019: 无法解析的外部符号 _engClose,该符号在函数 _main 中被引用 C:\Users\OurEDA\Desktop\Ahotspot\Models\RSS CSI Models\matlab\main.obj matlab
错误 6 error LNK2019: 无法解析的外部符号 _engGetVariable,该符号在函数 "void __cdecl dataProcessing(struct engine *)" (?dataProcessing@@YAXPAUengine@@@Z) 中被引用 C:\Users\OurEDA\Desktop\Ahotspot\Models\RSS CSI Models\matlab\main.obj matlab
错误 7 error LNK1120: 6 个无法解析的外部命令 C:\Users\OurEDA\Desktop\Ahotspot\Models\RSS CSI Models\Debug\matlab.exe 1 1 matlab

检查MATLAB和VS是否运行在同一平台上,如果MATLAB是x64,那么配置管理器中一定要选中x64,否则选Win32:

右键项目——在配置管理器的下拉菜单里选中正确的平台,然后按照上面所述的过程重新配置路径。

以上~

 

OpenCV3.1.0+VS2013配置+Win10(64位)(转载)的更多相关文章

  1. WIN10+ VS2013 配置Opencv2413 64位

    VS2013 配置Opencv2413  64位 系统变量 Path:  F:\2biancheng_tool\Opencv2413\opencv\build\x64\vc12\bin 用户变量:添加 ...

  2. Win10 OpenCV3.3.0+VS2013配置大坑,OpenCV解决方案编译报错“找不到python36_d.lib”错误

    今天因为想要用OpenCV做图像识别,小白一个,在网上找到一个教程,但是需要配置OpenCV3.3.0的环境,于是又在网上找OpenCV3.3.0+VS2013(因为我之前已经安过了VS2013),前 ...

  3. Win10 64位+VS2015+Opencv3.3.0安装配置

    Win10 64位+VS2015+Opencv3.3.0安装配置 1.我们首先下载VS2015.OpenCV3.3.0. 1.1 VS2015下载 在官网https://visualstudio.mi ...

  4. (win10 64位系统中)Visual Studio 2015+OpenCV 3.3.0环境搭建,100%成功

    (win10 64位系统中)Visual Studio 2015+OpenCV 3.3.0环境搭建,100%成功 1.下载opencv 官网http://opencv.org/下载windows版Op ...

  5. win10 64位专业版系统中显示32位dcom组件配置的方法

    word.excel是32位的组件,当用户64位系统在运行窗口中输入dcomcnfg命令时,在打开的组件服务管理窗口,是找不到Microsoft Excel.word程序的.另外,Windows 环境 ...

  6. [转]VS2013+简单稀疏光束调整库SSBA配置(64位编译)

    有关SSBA库的资源比较少,我是在Github上搜索下载的,具体的GitHub官方下载地址为:SSBA 下载后在SSBA解压文件夹下新建文件夹build. 打开cmake gui,在source co ...

  7. WIN10 64位下VS2015 MFC直接添加 halcon 12的CPP文件实现视觉检测

    近段时间开始接触halcon,但是在VS2015里面使用,无论是配置还是生产EXE文件,都不如意. 加上网上的教程很多,经过多次测试,其实有很多地方无需修改,如果修改的太多也失去了直接添加封装的意义. ...

  8. Hadoop 3.2.1 win10 64位系统 vs2015 编译

    Hadoop 3.2.1 win10 64位系统 vs2015 编译 1        环境配置 1.1   JDK下载安装 1.1.1         下载 JDK 1.8    (jdk1.8.0 ...

  9. Win10 64位安装SQL2000(个人版)

    默认Win10上是不允许安装SQL2000的,毕竟SQL2000已经是10多年前的老软件了,但是因为它成熟稳定,相比SQL2005,SQL2008R2,SQL2012,SQL2014,体积要小的多,所 ...

随机推荐

  1. scikit-learn(window,linux)安装

    scikit-learn是python的机器学习库 记录下载window中和linux中如何下载scikit-learn 方法一 直接下载Anaconda 这是一个非常齐全的python发行版本,里面 ...

  2. 【OpenGL】用OpenGL shader实现将YUV(YUV420,YV12)转RGB-(直接调用GPU实现,纯硬件方式,效率高)

    这段时间一直在搞视频格式的转换问题,终于最近将一个图片的YUV格式转RGB格式转换成功了.下面就来介绍一下: 由于我的工程是在vs2008中的,其中包含一些相关头文件和库,所以下面只是列出部分核心代码 ...

  3. ci框架(二)

    自定义SQL语句                                                                             当提供的API满足不了我们对S ...

  4. 【笔记】探索js 的this 对象 (第一部分)

    最近在看 你不知道的javascript 这本书,在第二部分看到了一个比较重要的知识点 那就是 this对象的全面认识,于是做一下笔记 博主本人在看这本书之前也一直以为 this 是指一切引用类型的本 ...

  5. promise对象解决回调地狱

    先放一张图片感受一下回调地狱 看起来是真的很让人头痛的东西 而现在我这里使用promise对象来解决回调地狱 采用链式的 then,可以指定一组按照次序调用的回调函数. 这时,前一个 then 里的一 ...

  6. Solidworks如何添加齿轮

    打开ToolBox,找到GB,动力传动,齿轮,正齿轮,然后拖放到绘图窗口(切记要在装配图里面弄,不是在单个零件里面弄)   设置齿轮的参数,一般只需要设置模数,齿数,面宽,类型,总长度(面宽就是有齿轮 ...

  7. Tomcat的server.xml配置讲解(一)

    一.Tomcat虚拟目录的配置 1.服务器配置 默认端口号为8080,如果要想修改端口号,则可以在Tomcat目录中的conf/server.xml文件,找到如下代码,将端口号改为:80:保存serv ...

  8. AFNetworking 下载文件断点续传操作

    一:本示例代码包括: 文件下载,写入指定目录 下载进度,回调Progress; 断点续传,下载暂停,继续操作: 二:本项目 适用于 AFNetworking 1.x 版本 #pragma mark 断 ...

  9. 偶遇RecyclerView内部Bug

    写在前面           最近忙着赶项目进度,都不知道这次博客写点啥好了,前两天碰巧遇到一个奇怪的bug,项目中未发现与异常相关的类,于是去百度.谷歌搜索,发现这是一个早就可能被写烂吐槽的Recy ...

  10. JS判断一个字符串是否包含一个子串函数.

    微信小程序 JS判断一个字符串是否包含一个子串函数. //str 字符串,name子串     contains:function(str,name){         if(str.indexOf( ...