Problem with rgb2gray function ?
31 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Jenny
el 23 de En. de 2013
Comentada: Image Analyst
el 1 de Jun. de 2017
I've made a GUI with GUIDE which makes a RGB image into binary image. I have the following code in one part of the program :
fileName = uigetfile('*.jpg');
imshow(fileName);
I = imread(fileName);
Iinitial = I;
Igray = rgb2gray(Iinitial);
I = imcomplement(I);
Igray = rgb2gray(I);
And it gives me that following error:
??? Error using ==> rgb2gray>parse_inputs at 82
MAP must be a m x 3 array.
Error in ==> rgb2gray at 35
X = parse_inputs(varargin{:});
Error in ==> lets_see>pushbutton1_Callback at 97
Igray = rgb2gray(Iinitial);
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> lets_see at 42
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)lets_see('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
??? Error while evaluating uicontrol Callback
I cannot find the problem and fix it. If somebody knows, please help. Thanks!
2 comentarios
VYSHAKH V NAIR
el 1 de Jun. de 2017
may be this is because you are choosing a gray scale image as input.and trying again to convert it to gray scale.
Image Analyst
el 1 de Jun. de 2017
Yes, and that's what my solution below checks for. It checks how many color channels there are and only calls rgb2gray() if it's a color image.
Respuesta aceptada
Sabarinathan Vadivelu
el 23 de En. de 2013
Check with your input image. It was gray image.
2 comentarios
VIKAS PATEL
el 29 de Mayo de 2015
yes, I was having the same problem and it helped me. Thank you so much.
Más respuestas (2)
Image Analyst
el 23 de En. de 2013
Editada: Image Analyst
el 10 de Mzo. de 2017
You can only call rgb2gray() on a color image. Calling rgb2gray() on an image that is already gray scale will throw an error. Add this code to make sure the conversion is done ONLY on RGB images:
% Get the number of rows and columns,
% and, most importantly, the number of color channels.
[rows, columns, numberOfColorChannels] = size(Iinitial);
if numberOfColorChannels > 1
% It's a true color RGB image. We need to convert to gray scale.
Igray = rgb2gray(Iinitial);
else
% It's already gray scale. No need to convert.
Igray = Iinitial;
end
6 comentarios
Anis Abboud
el 28 de Nov. de 2014
Shorter version:
if size(I, 3) > 1
I = rgb2gray(I);
end
0 comentarios
Ver también
Categorías
Más información sobre Image Processing Toolbox en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!