我正在尝试获取用户选择的图像像素的RGB值,但是我得到了这个超出范围的错误。这是代码:
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);
这是我得到的错误(当用户选择像素120,131时):
试图访问img(120,131,1); index必须是正整数或逻辑。
要停止出现此错误,我将x和y声明为int16,但错误仍然存在。然后我尝试手动放置像素的值,所以我做了这样的事情:
r = img(229,104,1);
现在的错误是:
试图访问img(229,104,1);索引 边界因为大小(img)= [217,331,3]。
这怎么可能如果像素不是真的超出范围?代码有什么问题?
答案 0 :(得分:2)
您将X-Y坐标与行列坐标混淆。
ginput
重新调整像素的x(=列),y(=行)坐标
访问矩阵img( ?, ?, : )
时,您需要提供行(= y),列( - x)坐标:
>> img( y, x, 1 )
答案 1 :(得分:0)
除了Shai的回答之外,我还想知道对ginput
的调用是否不会覆盖int16
和x
声明为y
的数据类型?如果我在Octave做类似的事情,我会得到:
>> [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);