2013-11-04 78 views
2

我想獲得用戶選擇的圖像的像素的RGB值,但是然後我得到這個界限的錯誤。這是代碼:索引越界MATLAB中的錯誤

x = int16(zeros(10,1)); 
y = int16(zeros(10,1)); 

imshow(img); 
[x,y] = ginput; 
disp(['x = ' num2str(x)]); 
disp(['y= ' num2str(y)]); 
r = img(x,y,1); 
g = img(x,y,2); 
b = img(x,y,3); 

這是錯誤我得到(當用戶選擇的像素120131):

試圖訪問IMG(120,131,1); 索引必須是正整數或邏輯。

要停止發生此錯誤,我將x和y聲明爲int16,但錯誤仍然存​​在。然後我試圖手動將像素值,所以我做了這樣的事情:

r = img(229,104,1); 

而現在的錯誤是這樣的:

試圖訪問IMG(229,104,1);索引出 範圍,因爲size(img)= [217,331,3]。

這怎麼可能如果像素不是真的越界?代碼有什麼問題?

回答

0

除了夏嘉曦的回答,我也想知道如果調用ginput對於xy不會覆蓋聲明爲int16的數據類型?如果我在八度類似的東西,我得到:

>> [x,y]=ginput 
x = 79.798 
y = 72.042 

我建議:

r = img(round(y),round(x),1); 
g = img(round(y),round(x),2); 
b = img(round(y),round(x),3); 
+0

是的它的工作!但正如你所問,數據類型不會被覆蓋,因爲我放的顯示整數......有點奇怪,但我會用你的建議。 – user2952272

+0

嘗試在調用'numstr'時使用'precision'參數,我非常有信心你會發現它們不是整數。你也可以用'whos'來檢查數據類型。 – am304

2

您正在將X-Y座標與行列座標混淆。

ginput returs x(=列),y(=行)座標的像素。
當訪問矩陣img(?, ?, :)您需要提供(= Y),( - x)的座標:

>> img(y, x, 1) 
+0

嘿感謝回答,但仍然有**指數必須是正整數或邏輯**。錯誤 – user2952272

+0

@ user2952272看到我的答案,我懷疑'ginput'返回雙精度數字。 – am304