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 commentaires

VYSHAKH V NAIR
VYSHAKH V NAIR le 1 Juin 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
Image Analyst le 1 Juin 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.

Connectez-vous pour commenter.

 Réponse acceptée

Sabarinathan Vadivelu
Sabarinathan Vadivelu le 23 Jan 2013

3 votes

Check with your input image. It was gray image.

2 commentaires

Jenny
Jenny le 23 Jan 2013
You were right! Thank you very much!
VIKAS  PATEL
VIKAS PATEL le 29 Mai 2015
yes, I was having the same problem and it helped me. Thank you so much.

Connectez-vous pour commenter.

Plus de réponses (2)

Image Analyst
Image Analyst le 23 Jan 2013
Modifié(e) : Image Analyst le 10 Mar 2017

4 votes

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 commentaires

Jenny
Jenny le 23 Jan 2013
Perfect! This was really useful. Thanks a lot!
James
James le 12 Déc 2013
I found this code very useful, thank you!
Manoj Kumar
Manoj Kumar le 17 Mar 2014
Thanks for your code. It helped me
aimi shaharuddin
aimi shaharuddin le 11 Oct 2016
thank you! helps me a lot
linsong zhan
linsong zhan le 9 Mar 2017
Thanks for your short codes. It helps me for my project.
Asma Shahid
Asma Shahid le 13 Avr 2017
Thank you so much for your help.This code is very helping.

Connectez-vous pour commenter.

Anis Abboud
Anis Abboud le 28 Nov 2014

0 votes

Shorter version:
if size(I, 3) > 1
I = rgb2gray(I);
end

Catégories

En savoir plus sur Convert Image Type dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by