c++调用matlab

教程

1.测试代码1
cmd执行(需要安装matlab)
mcc -W cpplib:test -T link:lib test.m
matlab程序(test.m)

matlab配置
配置方法是一样的
.h E:\Program Files\Polyspace\R2020a\extern\include
.dll E:\Program Files\Polyspace\R2020a\extern\bin\win64
.lib E:\Program Files\Polyspace\R2020a\extern\lib\win64\microsoft

if (!mclInitializeApplication(NULL, 0))//初始化matlab
    {
        std::cout << "Could not initialize the application.\n";
        return;
    }
    if(!Radar_processing_ugInitialize())//初始化matlab函数
    {
        std::cout << "Could not initialize the library.\n";
        return;
    }

    mwArray txt_path(1, 1, mxDOUBLE_CLASS);
    mwArray TimeStamp(1, 1, mxDOUBLE_CLASS);
    mwArray TargetValue(1, 1, mxDOUBLE_CLASS);

    char str[] = "F:/dataTest/data/input_data/Route_4";
    mwArray folder_path(str);

    Radar_processing_ug(3, txt_path, TimeStamp, TargetValue, folder_path);
    mclWaitForFiguresToDie(NULL);//等待图像显示,不加此句无法显示图像
    Radar_processing_ugTerminate();//关闭动态库,如果不关闭,matlab的绘制窗口不会被销毁
    mclTerminateApplication();//关闭matlab函数

test.m

function result=test(a,b)
  result =a+b
  stem(c)
end

test.cpp


#include <iostream>
#include "test.h"
using namespace std;

int main()
{
    bool isOk = 0;
    if (!mclInitializeApplication(NULL, 0))
    {
        cout << "Could not initialize the application.\n";
        return -1;
    }
    cout << "isOk = " << isOk << endl;
    isOk = testInitialize();
    cout << "isOk = " << isOk << endl;
    mwArray a(1, 1, mxDOUBLE_CLASS);  //函数参数类型为mwArray, 大小为1*1,数据类型为double
    mwArray b(1, 1, mxDOUBLE_CLASS);
    a(1, 1) = 1.8; //初始化参数
    b(1, 1) = 2.9;
    mwArray z(1, 1, mxDOUBLE_CLASS);
    test(1, z, a, b);
    cout << a << "+" << b << "=" << z << endl;
    mclWaitForFiguresToDie(NULL);
    testTerminate();
    mclTerminateApplication();
    return 0;
}

vs2019配置
添加.h,.lib,.dll

VS2019调用Matlab2019b生成的dll时初始化异常
https://blog.csdn.net/lvh98/article/details/124754645

2.测试代码2
mcc -W cpplib:imgtest -T link:lib imgtest.m

imgtest.m

function ImgShow(img)
imshow(img);

imgtest.cpp


#include "imgtest.h"
#include <opencv2/imgproc/imgproc.hpp>  // Gaussian Blur
#include <opencv2/core/core.hpp>        // Basic OpenCV structures (cv::Mat, Scalar)
#include <opencv2/highgui/highgui.hpp>  // OpenCV window I/O
#include <iostream>
using namespace std;
using namespace cv;

int main() {
    bool isOk = 0;//判断动态库是否初始化成功
    if (!mclInitializeApplication(NULL, 0))
    {
        cout << "Could not initialize the application.\n";
        return -1;
    }
    cout << "isOk = " << isOk << endl;// 0
    isOk = imgtestInitialize(); // 动态库初始化成功
    cout << "isOk = " << isOk << endl;// 1
    Mat disp_image = imread("E:\\matlab\\pro\\extern2\\img1.png", 1);//调用opencv读取图片
    /*将opencv图像数据转为Matlab图像数据*/
    //Mat数据类型转为mwArray
    mwSize  mdim[3] = { disp_image.rows,disp_image.cols,3 };
    mwArray mdisp_image(3, mdim, mxDOUBLE_CLASS, mxREAL);
    //C++输入转matlab  接口矩阵转化及像素归一化
    for (int j = 0; j < disp_image.rows; ++j) {
        for (int i = 0; i < disp_image.cols; ++i) {
            Vec3b& mp = disp_image.at<Vec3b>(j, i);  //C++用向量存储像素值
            double B = mp.val[0] * 1.0 / 255;       //像素归一化到0-1之间
            double G = mp.val[1] * 1.0 / 255;
            double R = mp.val[2] * 1.0 / 255;
            mdisp_image(j + 1, i + 1, 1) = R;            //matlab中用三个面R,G,B存储像素值
            mdisp_image(j + 1, i + 1, 2) = G;            //C++图像矩阵像素值赋给matlab矩阵
            mdisp_image(j + 1, i + 1, 3) = B;
        }
    }
    imgtest(mdisp_image); //调用matlab函数
    mclWaitForFiguresToDie(NULL);  //等待图像显示,不加此句无法显示图像
    imgtestTerminate();  //关闭动态库
    mclTerminateApplication();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ccsu_cw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值