Convert an RGB image to grayscale but keep one color?
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
A = imread('C:\FFOutput\gdgf\B.jpg'); B = rgb2gray(A); figure(1),imshow(B);
I have converted the image to a grayscale but don't know how to keep one color especially green.
0 Kommentare
Antworten (4)
yonatan gerufi
am 7 Sep. 2014
Bearbeitet: yonatan gerufi
am 7 Sep. 2014
Hi, there are several ways to do it,
i find it easy to do:
red_color = A(:,:,1);
green_color = A(:,:,2);
blue_color = A(:,:,3);
John
am 7 Sep. 2014
I am guessing you want the green channel stored in a separate matrix. In your code, A is only read. Its value does not change after the call to rgb2gray. To get the green channel from A:
greenChannel = A(:,:,2);
Image Analyst
am 7 Sep. 2014
I just answered this an hour ago for someone. See my comment http://www.mathworks.com/matlabcentral/answers/153732-question-concerning-color-segmentation-performance#comment_235875
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/175538/image.jpeg)
3 Kommentare
DGM
am 21 Okt. 2022
Bearbeitet: DGM
am 13 Feb. 2023
Refer to this answer for more details on how this can be done. While that link includes multiple methods, I'm going to use MIMT replacepixels() for ease of use.
% this is a color image
rgbpict = imread('coloredChips.png');
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1163923/image.png)
% create a grayscale copy by some means
graypict = rgb2gray(rgbpict); % BT601 luma
% HSV ranges for masking
rangeR = [0.963 0.016; 0.258 1; 0.338 1];
rangeG = [0.380 0.453; 0.258 1; 0.338 1];
% create masks to select objects of specified colors
hsvpict = rgb2hsv(rgbpict);
maskR = all(hsvpict >= permute(rangeR(:,1),[2 3 1]),3) ...
| all(hsvpict <= permute(rangeR(:,2),[2 3 1]),3);
maskG = all(hsvpict >= permute(rangeG(:,1),[2 3 1]),3) ...
& all(hsvpict <= permute(rangeG(:,2),[2 3 1]),3);
% clean the masks
maskR = bwareaopen(maskR,100);
maskG = bwareaopen(maskG,100);
% composite the color and gray images using the masks
% replacepixels is from MIMT
outpictR = replacepixels(rgbpict,graypict,maskR);
outpictG = replacepixels(rgbpict,graypict,maskG);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1163928/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1163933/image.png)
0 Kommentare
Siehe auch
Kategorien
Mehr zu Convert Image Type finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!