OPENCV320+VS2015+MATLAB2016b混编配置

〇、环境配置算法

win10 64位操做系统数组

OPENCV320仅支持64位less

MATLAB2016b按装的64位版本ide

VS2015也是64位版本测试

1、MATLAB中的C++编译器查看方法spa

在matlab命令行中输入指令操作系统

mex –setup命令行

可能会出现多个C++编译器的选择,但个人计算机上目前只有一个debug

 


 

2、Opencv在MATLAB中的配置方法指针

修改mex_C++win64.xml,文件所在位置以下图所示

修改其中的PATH,INCLUDE,LIB,LIBPATH,以下图

图中

PATH指的是DLL文件路径;

INCLUDE是头文件路径;

LIB是lib文件所在路径;

LIBPATH添加与LIB一样的配置路径。


 

3、CPP接口文件编写

在编写的接口文件(假设命名testOpenCV.cpp)中添加

#include"mex.h"

#include "opencv.hpp"

#pragma comment( lib, "opencv_world320.lib" )// 使用release版本

//using namespace cv;

// nlhs:输出参数数目   (Left-hand side)

// plhs:指向输出参数的指针

// nrhs:输入参数数目

// prhs:指向输入参数的指针

void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

{

    char name[256];   
    if (nrhs < 1)
    {
        mexErrMsgTxt("the number of input param less than 1");
        return ;
    }
    if( !mxIsChar(prhs[0]))
    {
        mexErrMsgTxt("First parameter must be string");
        return ;
    }
    int buflens = mxGetNumberOfElements(prhs[0]);
    mxGetString(prhs[0], name, buflens+1);
    mexPrintf(name);
    IplImage * img = cvLoadImage(name);
    if(img == NULL || img->imageData == NULL)
    {
        mexErrMsgTxt("Error in image");
        return;
    }
    int flag = cvSaveImage( "b.bmp", img );
    cvReleaseImage(&img);
//     cvNamedWindow("test");
//     cvShowImage("test",img);
//     cvWaitKey(0);
    return;

}

在MATLAB的命令窗口输入

mex -v -g -compatibleArrayDims testOpenCV.cpp

而后运行在命令窗口运行testOpenCV('a.bmp')便可。

假设a.bmp是与testOpenCV.mexw64文件相同路径下的图像文件。


 

4、错误解决方案

问题一

若是报错找不到testOpenCV.mexw64模块之类的错误,大概是由于PATH路径设置没有发挥做用,把用到的opencv的release版本的dll文件放到

C:\Program Files\MATLAB\R2016b\bin\win64

路径下便可(每台计算机的MATLAB安装路径可能不一样,因此在查找该路径是要开动思路)

在下配置的是openCV320版本的,对应的dll文件只有一个

opencv_world320.dll  

将opencv_world320.dll放到C:\Program Files\MATLAB\R2016b\bin\win64

便可解决“若是报错找不到testOpenCV.mexw64模块之类的错误”。

问题二

若是在运行时遇到如下错误,如图所示

基本上是由于testOpenCV.cpp文件中运行过程当中有内存错误,遇到这一类问题,主要仍是本身代码中的错误形成的,

MATLAB没有VS开发环境那么方便的运行调试界面,返回信息也很少,只会弹出如上图所示的错误信息。

只要仔细琢磨代码中可能出错的地方,尤为须要注意指针判空,或者数组越界之类,修改其中的错误便可正确运行。

另外,还有人提示说多是由于使用opencv debug版本的lib和dll,也会形成以上错误提示,经测试发现

使用#pragma comment( lib, "opencv_world320d.lib" )时,调用OpenCV中提供的LSD直线检测算法的确会出现以上错误信息,

将#pragma comment( lib, "opencv_world320d.lib" )修改成

#pragma comment( lib, "opencv_world320.lib" )

以后,编译运行正常的。

相关文章
相关标签/搜索