Problem with rgb2gray function ?

31 ビュー (過去 30 日間)
Jenny
Jenny 2013 年 1 月 23 日
コメント済み: Image Analyst 2017 年 6 月 1 日
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
Sabarinathan Vadivelu 2013 年 1 月 23 日
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 Center および File ExchangeImage Processing Toolbox についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by