1

我正在创建一个模拟,我将自己移植到另一种语言。所以我不需要使用 Simulink 的代码生成功能。如何关闭它允许代码生成的尝试?

例如,我在MATLAB Function块中有以下代码:

function OutImage = ResizeCropPad(InImage, Width, Height)
%#codegen

    %coder.extrinsic('imresize');

    % resizing to defined height
    scale = Height/size(InImage,1);
    InImage = imresize(InImage, scale);

    % cropping to defined width
    if Width<size(InImage,2)
        padarray(InImage, [0 size(InImage,2)-Width], 0, 'both');
    elseif Width>size(InImage,2)
        b = floor((Width-size(InImage,2))/2);
        InImage = InImage(:,b:b+Width-1,:);
    end

    OutImage = InImage;

它给出了一个错误

独立代码生成不支持函数“imresize”。请参阅 coder.extrinsic 的文档以了解如何在模拟中使用此函数。

如果我取消注释coder.extrinsic('imresize')行,我会收到新错误

应为逻辑、char、int、fi、single 或 double。找到一个 mxArray。MxArrays 从对 MATLAB 解释器的调用中返回,并且在表达式中不受支持。它们只能用于赋值的右侧,并作为外部函数的参数。

寻址第 11 行,使用if.

为什么?是否可以完全禁用代码生成,例如在模型级别?

4

1 回答 1

2

您需要在调用函数之前取消注释该coder.extrinsic('imresize');行并声明/初始化变量。有关详细信息,请参阅将 mxArrays 转换为已知类型InImageimresize

编辑以下评论中的讨论

以下应该有效:

function OutImage = ResizeCropPad(InImage, Width, Height)
%#codegen

    coder.extrinsic('imresize');

    % resizing to defined height
    scale = Height/size(InImage,1);
    OutImage = InImage;
    OutImage = imresize(InImage, scale);

    % cropping to defined width
    if Width<size(OutImage,2)
        padarray(OutImage, [0 size(OutImage,2)-Width], 0, 'both');
    elseif Width>size(OutImage,2)
        b = floor((Width-size(outImage,2))/2);
        OutImage = OutImage(:,b:b+Width-1,:);
    end
于 2013-07-18T14:15:03.407 回答