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" )

以後,編譯運行正常的。

相關文章
相關標籤/搜索