Convert an RGB image to grayscale but keep one color?

7 ビュー (過去 30 日間)
Jaja
Jaja 2014 年 9 月 7 日
編集済み: DGM 2023 年 2 月 13 日
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.

回答 (4 件)

yonatan gerufi
yonatan gerufi 2014 年 9 月 7 日
編集済み: yonatan gerufi 2014 年 9 月 7 日
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);
  1 件のコメント
Jaja
Jaja 2014 年 9 月 7 日
how can I add this to my code to keep the green one? can you give me an example with the code??

サインインしてコメントする。


John
John 2014 年 9 月 7 日
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);
  1 件のコメント
Jaja
Jaja 2014 年 9 月 7 日
nothing happens actually. can you give me an example with the code??

サインインしてコメントする。


Image Analyst
Image Analyst 2014 年 9 月 7 日
  3 件のコメント
Jaja
Jaja 2014 年 9 月 25 日
I actually want to keep the color green in the picture and the rest of the color is in the grayscale
Image Analyst
Image Analyst 2014 年 9 月 25 日
Why? That's pretty much what the original image is already.

サインインしてコメントする。


DGM
DGM 2022 年 10 月 21 日
編集済み: DGM 2023 年 2 月 13 日
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');
% 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);
See this answer for more details on how the masking could be done for this particular image.
See also this thread about different ways of partially desaturating a part of an image.

カテゴリ

Help Center および File ExchangeConvert Image Type についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by