2015-04-21 51 views
0

我试图用MATLAB编码器生成C代码。该函数的输入是在MATLAB中已被imread处理的图像。由于输出应该是m×n×3数组,从imread,我不确定为什么会显示此错误。下面显示了函数开始处的断言。之后是rgb2gray这是错误的来源。MAP在MATLAB中必须至少有'm×3阵列'错误

%#codegen 

assert(isa(IM, 'uint8')); 
assert(size(IM, 1) < 100); 
assert(size(IM, 2) < 100); 
assert(size(IM, 3) == 3); 

I_temp = rgb2gray(IM); 

错误报告我似乎得到如下所示:

Error Report

给函数的输出和输入在下面给出:

function [actual_lep_x, actual_lep_y, actual_rep_x, actual_rep_y, actual_lmp_x, actual_lmp_y, actual_rmp_x, actual_rmp_y, actual_lnp_x, actual_lnp_y, np_x, np_y] = Points(IM) 

我可以发送过.m文件是否有人需要编译它。

帮助将非常感谢!

+0

能不能请张贴完整的错误,你进入你的问题?我们可以假设所有的断言都是有效的吗? – krisdestruction

+1

'imread'的第二个输出参数会给你色彩图('m x 3')。第一个参数为您提供图像本身(如果是灰度,则为“m x 3”,如果是颜色,则为“m x n x 3”)。 –

+0

colormap是否必须是“rgb2gray”的输入?为什么图像本身不能成为“rgb2gray”的输入?这[文档](http://uk.mathworks.com/help/matlab/ref/rgb2gray.html)表明它当然可以。 –

回答

1

如果您的代码是,确切地说与您在图片中显示的相同,那么错误是显而易见的。 IM似乎是一个文件名,因为在上面的行上,你已经完成了I_ttemp=imread(IM)(这是一个未知的原因注释)。现在,因为rgb2gray没有收到m x n x 3数组,所以除此之外的其他参数是尺寸为m x 3的颜色映射。但是,您提供了一个文件名,格式为1 x m。因此错误。

你应该写:

I_temp=imread(IM); 
if size(I_temp,3)==3 
    I_temp=rgb2gray(I_temp); 
end 
%do processing on I_temp. 
+0

由于我是从MATLAB到C的代码,我不能在函数内使用'imread'。但是,我希望在脚本中写入的'imread'输出成为此函数的输入。我目前声称'IM'是一个图像,而不是文件名。这就是为什么我不确定为什么我有这个错误。 –

+0

我认为这个错误的唯一原因是'IM'不是'mxnx3'的形式。但是,如果您对相同的说法进行陈述,则不应该成为问题。你能看到什么样的变量'IM'是?我还没有试过'codegen',但'whos'可以告诉你什么样的变量'IM'是。 –

+0

'762x562x3 uint8'是我得到的答案,当我运行一个有效的输入到函数并调用whos –

相关问题