2013-11-04 96 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