2013-11-04 6 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)에 액세스하려고 시도; 크기가 (img) = [217,331,3]이므로 인덱스는 범위를 벗어납니다.

어떻게 가능합니까? 픽셀이 실제로 범위를 벗어나지 않은 경우? 이 코드의 문제점은 무엇입니까?

답변

0

가, 나 또한 궁금하네요 경우 호출 ginputxy에 대해 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 픽셀의 x (= 열), y (= 행) 후퇴 좌표입니다.
당신이 (= Y), 열을 제공해야 img(?, ?, :) 매트릭스에 접근 (- x)의 좌표 :

샤이의 대답에 추가
>> img(y, x, 1) 
+0

안녕하세요 덕분에 **. 오류 – user2952272

+0

@ user2952272 내 대답보기, 나는'ginput' double precision numbers를 반환합니다. – am304

관련 문제