Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB编码器中使用带有阶跃函数的MX阵列的问题_Matlab_Image Processing_Matlab Coder - Fatal编程技术网

在MATLAB编码器中使用带有阶跃函数的MX阵列的问题

在MATLAB编码器中使用带有阶跃函数的MX阵列的问题,matlab,image-processing,matlab-coder,Matlab,Image Processing,Matlab Coder,我正在尝试使用MATLAB编码器将我在MATLAB上的图像处理代码转换成C。使用imread需要coder.entrisic声明。但是,这意味着imread的输出将是一个mxArray。这是一个问题,因为我无法将其用于步骤功能。代码生成的错误报告如下所示: 有人知道解决方法吗?使用coder.extrinsic时,声明为extrinsic的函数将返回mxArray类型。如果您将这些函数传递给其他Matlab函数,编码器将很好地解决所有问题,但如果您将它们与自己的函数一起使用,或者以任何方式尝试

我正在尝试使用MATLAB编码器将我在MATLAB上的图像处理代码转换成C。使用
imread
需要
coder.entrisic
声明。但是,这意味着imread的输出将是一个mxArray。这是一个问题,因为我无法将其用于
步骤
功能。代码生成的错误报告如下所示:


有人知道解决方法吗?

使用coder.extrinsic时,声明为extrinsic的函数将返回mxArray类型。如果您将这些函数传递给其他Matlab函数,编码器将很好地解决所有问题,但如果您将它们与自己的函数一起使用,或者以任何方式尝试操纵它们,则需要帮助编码器将它们解析为已知类型。您可以通过预先定义一个变量并将mxArray复制到其中来实现这一点,这将允许编码器正确地转换为标准数据类型。如果您事先知道确切的大小,可以在调用之前预先分配变量并跳过副本,但在这种情况下可能会有点棘手

对于您的函数,我假设您在某个地方有一个调用,如下所示:

I = imread([some paramaters]);
我们需要从imread调用中获取mxArray类型,然后确定其维度,以便在本机类型中分配另一个变量。使用
size
函数本身确定mxArray维度需要有一个预分配的变量,以便
size
也不会返回mxArray。以下是步骤:

coder.extrinsic('imread');
Itemp = imread([some paramaters]);
idims = zeros(1,3); %Need to preallocate idims so it does not become an mxArray
idims = size(Itemp)
I = coder.nullcopy(zeros(idims, 'uint8'));  % Allocate but do not initialize an array of uint8 values of the same size as Itemp
I = Itemp; % Copy the data from the mxArray into the final variable.
如果在调用imread之前知道图像的确切大小,则可以跳过副本和第二个变量,只需将变量I预分配到正确的大小,但这通常不是图像读取的情况

您可以在Mathworks的以下帮助文档中看到有关如何执行此操作的更多信息:


我很高兴这有帮助。不幸的是,MATLAB文档在这个主题上没有太大帮助。此外,对于可变尺寸,需要稍微摆弄一下才能将所有内容转换。也许有一种方法可以在没有额外副本的情况下做到这一点,但我想不出来。