• 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举例

    1. 命令行中输入:deploytool

    2. 选择LIbrarycompiler

    3type 选择c++

    4,选择相应的

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

    6.导出后:

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

    3.qt 端 的环境配置

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

    1. win32:CONFIG(release, debug|release): LIBS += -LD:/my_software/opencv/opencv/newbuil_with_contrib/x64/vc15/lib/ -lopencv_world453
    2. else:win32:CONFIG(debug, debug|release): LIBS += -LD:/my_software/opencv/opencv/newbuil_with_contrib/x64/vc15/lib/ -lopencv_world453d
    3. INCLUDEPATH +=D:/my_software/opencv/opencv/newbuil_with_contrib/include
    4. DEPENDPATH += D:/my_software/opencv/opencv/newbuil_with_contrib/include/opencv2
    5. INCLUDEPATH += E:/my_software/eigen-3.4.0/eigen-3.4.0
    6. win32: LIBS += -L$$PWD/include/ -lmatAdd
    7. win32: LIBS += -L$$PWD/include/ -lfringe_process
    8. win32: LIBS += -L$$PWD/include/ -lcalculatephase
    9. win32: LIBS += -L$$PWD/include/ -ltest_FWLSI_FUNC4
    10. win32: LIBS += -L$$PWD/include/ -laberr_analy1
    11. win32: LIBS += -L$$PWD/include/ -laberr_analy2
    12. INCLUDEPATH += $$PWD/include
    13. DEPENDPATH += $$PWD/include
    14. # .h文件搜索路径
    15. INCLUDEPATH +=D:/my_software/matlab/extern/include
    16. INCLUDEPATH += D:/my_software/matlab/extern/include/Win64
    17. # 用到的MATLAB 的.lib库文件 及其搜索路径
    18. INCLUDEPATH += D:/my_software/matlab/extern/lib/win64/microsoft
    19. DEPENDPATH += D:/my_software/matlab/extern/lib/win64/microsoft
    20. win32: LIBS += -LD:/my_software/matlab/extern/lib/win64/microsoft/ -llibmex
    21. win32: LIBS += -LD:/my_software/matlab/extern/lib/win64/microsoft/ -llibmx
    22. win32: LIBS += -LD:/my_software/matlab/extern/lib/win64/microsoft/ -llibmat
    23. win32: LIBS += -LD:/my_software/matlab/extern/lib/win64/microsoft/ -llibeng
    24. win32: LIBS += -LD:/my_software/matlab/extern/lib/win64/microsoft/ -lmclmcr
    25. win32: LIBS += -LD:/my_software/matlab/extern/lib/win64/microsoft/ -lmclmcrrt

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

    项目的运行文件

    release /debug 下面放dill

     

     

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

    先写导入.h

     mwArray 重点在于  mwArray 的声明

    1. void MainWindow::dill_demo1( )
    2. {
    3. // img_in.convertTo(img_in, CV_32F);
    4. // cv::Mat img_ini=ganshe_matlabe.fringe_process(img_in);
    5. if (!matAddInitialize()) //DLL 初始化
    6. {
    7. return;
    8. }
    9. double vectA[]={1,2,3}; //向量A
    10. double vectB[]={5,6,7}; //向量B
    11. int rowCnt=1; //行数
    12. int colCnt=3; //列数
    13. int elementCnt=3; //元素个数
    14. mwArray matrixA(rowCnt,colCnt,mxDOUBLE_CLASS, mxREAL);//定义数组
    15. matrixA.SetData(vectA,elementCnt); //将C++ 的一维数组存储到 MATLAB的二维数组
    16. mwArray matrixB(rowCnt,colCnt,mxDOUBLE_CLASS, mxREAL);//定义数组
    17. matrixB.SetData(vectB,elementCnt); //
    18. //计算
    19. mwArray matrixC(rowCnt,colCnt,mxDOUBLE_CLASS, mxREAL);//定义数组,double类型
    20. int nargout=1;//输出变量个数
    21. matAdd(nargout,matrixC,matrixA,matrixB);//C=A+B
    22. int dim=2; //按照二维数组读出matrixC
    23. double av=matrixC.Get(dim,1,1); //第1行,第1列
    24. double bv=matrixC.Get(dim,1,2);// 第1行,第2列
    25. double cv=matrixC.Get(dim,1,3); // 第1行,第3列
    26. QString str=QString::asprintf("%.0f, %.0f, %.0f", av,bv,cv);
    27. qDebug()<<"str"<
    28. }

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

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

    1. cv::Mat image_test = cv::imread("E:/my_self_progect/image/expame/512X512.jpg",
    2. cv::IMREAD_GRAYSCALE);
    3. if (!calculatephaseInitialize()) //DLL 初始化
    4. {
    5. std::cerr << "Could not initialize the fringe_process properly" << std::endl;
    6. return;
    7. }
    8. if(!image_test.empty())
    9. {
    10. // Convert cv::Mat to mwArray
    11. mwSize dims2[2] = {static_cast(image_test.rows), static_cast(image_test.cols)};
    12. mwArray I_in2(2, dims2, mxDOUBLE_CLASS, mxREAL);
    13. for (int i = 0; i < image_test.rows; ++i)
    14. { for (int j = 0; j < image_test.cols; ++j)
    15. {
    16. I_in2(i + 1, j + 1) = static_cast<double>(image_test.at(i, j));
    17. }
    18. }
    19. }

     

  • 相关阅读:
    模拟shell小程序
    IP 地址的分类
    使用全局配置处理字段名和属性名不一致的情况
    javascript基础
    optee默认安全配置
    【linux命令讲解大全】122.Linux命令详解:groupadd和ldd的用法及原理
    H5 微信扫一扫
    了解JWT
    1543_AURIX_TC275_CPU子系统_CPU内核实现特性
    微信小程序开发的OA会议之首页搭建
  • 原文地址:https://blog.csdn.net/weixin_43608857/article/details/133064226