【问题标题】:mex function fill mxCreateDoubleMatrix MATLABmex 函数填充 mxCreateDoubleMatrix MATLAB
【发布时间】:2016-05-16 05:35:36
【问题描述】:

我有这几行代码:

cam::intStruct image = de->get_image ();
int i, j;
plhs[0] = mxCreateDoubleMatrix(320, 120, mxREAL);
memcpy(image.arr, plhs[0], 320 * 120 * sizeof(double));

我试图用图像内容填充 plhs[0],但结果我在输出中得到所有 0 值 (plhs[0])。

struct intStruct 
{
    int arr[320][120];
};

我做错了什么?

【问题讨论】:

    标签: arrays matlab mex


    【解决方案1】:

    您正在尝试用图像内容填充 plhs[0]。 也就是说,plhs[0] 是目标,图像 arr 是源。

    如果是这种情况,那么我认为 memcpy 应该如下更改。

    首先得到一个指向plhs[0]的指针,

    double *ptr = (double *)mxGetData(plhs[0]);
    

    然后在这个指针上做 memcpy。

    memcpy(ptr, image.arr, 320 * 120 * sizeof(double));
    

    【讨论】:

    • 像魅力一样工作,谢谢。另一个问题,如果我改变大小,即 640*240 matlab 再次崩溃,是因为内存吗?
    • 很高兴听到这个消息:)。 640 * 240 双倍,应该是 600 kb 左右,这对我来说听起来不像是内存问题,因为它通常是一个小内存。您是否在两次调用中都更改了大小,即 plhs[0] = mxCreateDoubleMatrix(640, 240 , mxREAL);和 memcpy(ptr, image.arr, 640* 240 * sizeof(double)); ??
    • 是的,我在两次调用中都进行了更改,但我想我的头文件存在问题。我试图将原始且未失真的 Leap 运动图像获取到 matlab,但在 640x240 上它会导致 Matlab 崩溃,同时在 Visual Studio 中使用 openCV 工作完美
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 2015-03-06
    • 2012-06-28
    相关资源
    最近更新 更多