qt matlab 混合编程

1.环境的说明

matlab 2021a

qt 5.12.10

qt creator 4.13.1

opencv 4.3.0

eigen-3.4.0/eigen-3.4.0

2.matlab 中导出dill

以aberr_analy1的导出dill举例

命令行中输入:deploytool

2. 选择LIbrarycompiler

3type 选择c++

4,选择相应的

5. 点击package 选择保存的路径即可

6.导出后:

只需要 下面这个文件里面的dll .h 和。Lib 文件

3.qt 端 的环境配置

1.opencv +eigen-3.4.0+matlab + 导出的lib 和include 的路径

win32:CONFIG(release, debug|release): LIBS += -LD:/my_software/opencv/opencv/newbuil_with_contrib/x64/vc15/lib/ -lopencv_world453
else:win32:CONFIG(debug, debug|release): LIBS += -LD:/my_software/opencv/opencv/newbuil_with_contrib/x64/vc15/lib/ -lopencv_world453d

INCLUDEPATH +=D:/my_software/opencv/opencv/newbuil_with_contrib/include
DEPENDPATH += D:/my_software/opencv/opencv/newbuil_with_contrib/include/opencv2

INCLUDEPATH += E:/my_software/eigen-3.4.0/eigen-3.4.0

win32: LIBS += -L$$PWD/include/ -lmatAdd
win32: LIBS += -L$$PWD/include/ -lfringe_process
win32: LIBS += -L$$PWD/include/ -lcalculatephase
win32: LIBS += -L$$PWD/include/ -ltest_FWLSI_FUNC4
win32: LIBS += -L$$PWD/include/ -laberr_analy1

win32: LIBS += -L$$PWD/include/ -laberr_analy2

INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include



# .h文件搜索路径
INCLUDEPATH +=D:/my_software/matlab/extern/include
INCLUDEPATH += D:/my_software/matlab/extern/include/Win64

# 用到的MATLAB 的.lib库文件 及其搜索路径
INCLUDEPATH += D:/my_software/matlab/extern/lib/win64/microsoft
DEPENDPATH += D:/my_software/matlab/extern/lib/win64/microsoft

win32: LIBS += -LD:/my_software/matlab/extern/lib/win64/microsoft/ -llibmex
win32: LIBS += -LD:/my_software/matlab/extern/lib/win64/microsoft/ -llibmx
win32: LIBS += -LD:/my_software/matlab/extern/lib/win64/microsoft/ -llibmat
win32: LIBS += -LD:/my_software/matlab/extern/lib/win64/microsoft/ -llibeng
win32: LIBS += -LD:/my_software/matlab/extern/lib/win64/microsoft/ -lmclmcr
win32: LIBS += -LD:/my_software/matlab/extern/lib/win64/microsoft/ -lmclmcrrt

在项目目录中新建了一个include 文件,放导出的include 和lib 文件

项目的运行文件

release /debug 下面放dill

4qt 中的相关运行代码示例

先写导入.h

mwArray 重点在于 mwArray 的声明

cpp 复制代码
void MainWindow::dill_demo1( )
{
    //    img_in.convertTo(img_in, CV_32F);
    //    cv::Mat img_ini=ganshe_matlabe.fringe_process(img_in);
    if (!matAddInitialize()) //DLL 初始化
    {

        return;
    }
    double   vectA[]={1,2,3}; //向量A
    double   vectB[]={5,6,7};  //向量B

    int   rowCnt=1;   //行数
    int   colCnt=3;   //列数
    int   elementCnt=3; //元素个数
    mwArray matrixA(rowCnt,colCnt,mxDOUBLE_CLASS, mxREAL);//定义数组
    matrixA.SetData(vectA,elementCnt); //将C++ 的一维数组存储到 MATLAB的二维数组

    mwArray matrixB(rowCnt,colCnt,mxDOUBLE_CLASS, mxREAL);//定义数组
    matrixB.SetData(vectB,elementCnt); //

    //计算
    mwArray matrixC(rowCnt,colCnt,mxDOUBLE_CLASS, mxREAL);//定义数组,double类型
    int nargout=1;//输出变量个数
    matAdd(nargout,matrixC,matrixA,matrixB);//C=A+B
    int dim=2; //按照二维数组读出matrixC
    double   av=matrixC.Get(dim,1,1); //第1行,第1列
    double   bv=matrixC.Get(dim,1,2);// 第1行,第2列
    double   cv=matrixC.Get(dim,1,3); // 第1行,第3列
    QString  str=QString::asprintf("%.0f, %.0f, %.0f", av,bv,cv);
    qDebug()<<"str"<<str;



}

1二维图像 中 mwArray 的声明方式

mwArray I_in2(2, dims2, mxDOUBLE_CLASS, mxREAL);

cpp 复制代码
        cv::Mat image_test = cv::imread("E:/my_self_progect/image/expame/512X512.jpg", 
            cv::IMREAD_GRAYSCALE);
        if (!calculatephaseInitialize()) //DLL 初始化
        {
            std::cerr << "Could not initialize the fringe_process properly" << std::endl;
            return;
        }
       
        if(!image_test.empty())
        {

            // Convert cv::Mat to mwArray

            mwSize dims2[2] = {static_cast<mwSize>(image_test.rows), static_cast<mwSize>(image_test.cols)};
            mwArray I_in2(2, dims2, mxDOUBLE_CLASS, mxREAL);
            for (int i = 0; i < image_test.rows; ++i)
            {   for (int j = 0; j < image_test.cols; ++j)
                {
                    I_in2(i + 1, j + 1) = static_cast<double>(image_test.at<uchar>(i, j));
                }

            }
         }
相关推荐
玩电脑的辣条哥2 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
ll7788115 小时前
LeetCode每日精进:20.有效的括号
c语言·开发语言·算法·leetcode·职场和发展
Jackson@ML6 小时前
Python数据可视化简介
开发语言·python·数据可视化
赵琳琅6 小时前
Java语言的云计算
开发语言·后端·golang
lly2024066 小时前
jQuery 杂项方法
开发语言
赵琳琅7 小时前
MDX语言的安全开发
开发语言·后端·golang
开开又心心的学嵌入式7 小时前
C语言——指针进阶应用
c语言·开发语言
开开又心心的学嵌入式7 小时前
C语言——指针基础知识
c语言·开发语言
lonelyhiker7 小时前
javascript的原型链
开发语言·javascript·原型模式
夏梓蕙8 小时前
Elixir语言的软件开发工具
开发语言·后端·golang