我正在创建一个模拟,我将自己移植到另一种语言。所以我不需要使用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解释器返回 并且在表达式中不受支持。它们可能只用于 任务的右侧和外在的参数 功能
使用if
解决第11行。
为什么呢?是否可以完全禁用代码生成,例如在模型级别?
答案 0 :(得分:1)
在调用coder.extrinsic('imresize');
函数之前,您需要取消注释InImage
行并声明/初始化imresize
变量。有关详细信息,请参阅Converting mxArrays to Known Types。
在评论中讨论后编辑:
以下内容应该有效:
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