Problem with rgb2gray function ?

20 次查看(过去 30 天)
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 个评论
VYSHAKH V NAIR
VYSHAKH V NAIR 2017-6-1
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 2017-6-1
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.

请先登录,再进行评论。

采纳的回答

Sabarinathan Vadivelu
Check with your input image. It was gray image.
  2 个评论
Jenny
Jenny 2013-1-23
You were right! Thank you very much!
VIKAS  PATEL
VIKAS PATEL 2015-5-29
yes, I was having the same problem and it helped me. Thank you so much.

请先登录,再进行评论。

更多回答(2 个)

Image Analyst
Image Analyst 2013-1-23
编辑:Image Analyst 2017-3-10
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 个评论
linsong zhan
linsong zhan 2017-3-9
Thanks for your short codes. It helps me for my project.
Asma Shahid
Asma Shahid 2017-4-13
Thank you so much for your help.This code is very helping.

请先登录,再进行评论。


Anis Abboud
Anis Abboud 2014-11-28
Shorter version:
if size(I, 3) > 1
I = rgb2gray(I);
end

类别

Help CenterFile Exchange 中查找有关 Red 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by