2015-04-21 50 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 –

相關問題