# Program to Change RGB color model to HSV color model

• Difficulty Level : Easy
• Last Updated : 10 May, 2021

Given RGB color range, our task is to convert RGB color to HSV color.
RGB Color Model :
The RGB color model is an additive color model in which red, green and blue light are added together in various ways to reproduce a broad array of colors. The name of the model comes from the initials of the three additive primary colors, red, green, and blue.

HSV Color Model :
HSV – (hue, saturation, value), also known as HSB (hue, saturation, brightness), is often used by artists because it is often more natural to think about a color in terms of hue and saturation than in terms of additive or subtractive color components. HSV is a transformation of an RGB colorspace, and its components and colorimetry are relative to the RGB colorspace from which it was derived.

Examples :

```Input : r, g, b = 45, 215, 0
Output :
h, s, v = 107.44186046511628, 100.0, 84.31372549019608

Input : r, g, v = 31, 52, 29
Output :
h, s, v = 114.78260869565217, 44.230769230769226, 20.392156862745097```

Approach :

1. Divide r, g, b by 255
2. Compute cmax, cmin, difference
3. Hue calculation :
• if cmax and cmin equal 0, then h = 0
• if cmax equal r then compute h = (60 * ((g – b) / diff) + 360) % 360
• if cmax equal g then compute h = (60 * ((b – r) / diff) + 120) % 360
• if cmax equal b then compute h = (60 * ((r – g) / diff) + 240) % 360
4. Saturation computation :
• if cmax = 0, then s = 0
• if cmax does not equal 0 then compute s = (diff/cmax)*100
5. Value computation :
• v = cmax*100

Below is the implementation of above approach :

## Java

 `// Java program change RGB Color``// Model to HSV Color Model``class` `GFG``{` `    ``static` `void` `rgb_to_hsv(``double` `r, ``double` `g, ``double` `b)``    ``{` `        ``// R, G, B values are divided by 255``        ``// to change the range from 0..255 to 0..1``        ``r = r / ``255.0``;``        ``g = g / ``255.0``;``        ``b = b / ``255.0``;` `        ``// h, s, v = hue, saturation, value``        ``double` `cmax = Math.max(r, Math.max(g, b)); ``// maximum of r, g, b``        ``double` `cmin = Math.min(r, Math.min(g, b)); ``// minimum of r, g, b``        ``double` `diff = cmax - cmin; ``// diff of cmax and cmin.``        ``double` `h = -``1``, s = -``1``;``        ` `        ``// if cmax and cmax are equal then h = 0``        ``if` `(cmax == cmin)``            ``h = ``0``;` `        ``// if cmax equal r then compute h``        ``else` `if` `(cmax == r)``            ``h = (``60` `* ((g - b) / diff) + ``360``) % ``360``;` `        ``// if cmax equal g then compute h``        ``else` `if` `(cmax == g)``            ``h = (``60` `* ((b - r) / diff) + ``120``) % ``360``;` `        ``// if cmax equal b then compute h``        ``else` `if` `(cmax == b)``            ``h = (``60` `* ((r - g) / diff) + ``240``) % ``360``;` `        ``// if cmax equal zero``        ``if` `(cmax == ``0``)``            ``s = ``0``;``        ``else``            ``s = (diff / cmax) * ``100``;` `        ``// compute v``        ``double` `v = cmax * ``100``;``        ``System.out.println(``"("` `+ h + ``" "` `+ s + ``" "` `+ v + ``")"``);` `    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``// rgb_to_hsv(45, 215, 0);``        ``// rgb_to_hsv(31, 52, 29);``        ``rgb_to_hsv(``129``, ``88``, ``47``);` `    ``}``}` `// This code is contributed by PrinciRaj1992`

## Python3

 `# Python3 program change RGB Color``# Model to HSV Color Model` `def` `rgb_to_hsv(r, g, b):` `    ``# R, G, B values are divided by 255``    ``# to change the range from 0..255 to 0..1:``    ``r, g, b ``=` `r ``/` `255.0``, g ``/` `255.0``, b ``/` `255.0` `    ``# h, s, v = hue, saturation, value``    ``cmax ``=` `max``(r, g, b)    ``# maximum of r, g, b``    ``cmin ``=` `min``(r, g, b)    ``# minimum of r, g, b``    ``diff ``=` `cmax``-``cmin       ``# diff of cmax and cmin.` `    ``# if cmax and cmax are equal then h = 0``    ``if` `cmax ``=``=` `cmin:``        ``h ``=` `0``    ` `    ``# if cmax equal r then compute h``    ``elif` `cmax ``=``=` `r:``        ``h ``=` `(``60` `*` `((g ``-` `b) ``/` `diff) ``+` `360``) ``%` `360` `    ``# if cmax equal g then compute h``    ``elif` `cmax ``=``=` `g:``        ``h ``=` `(``60` `*` `((b ``-` `r) ``/` `diff) ``+` `120``) ``%` `360` `    ``# if cmax equal b then compute h``    ``elif` `cmax ``=``=` `b:``        ``h ``=` `(``60` `*` `((r ``-` `g) ``/` `diff) ``+` `240``) ``%` `360` `    ``# if cmax equal zero``    ``if` `cmax ``=``=` `0``:``        ``s ``=` `0``    ``else``:``        ``s ``=` `(diff ``/` `cmax) ``*` `100` `    ``# compute v``    ``v ``=` `cmax ``*` `100``    ``return` `h, s, v`  `''' Driver Code '''``# print(rgb_to_hsv(45, 215, 0))``# print(rgb_to_hsv(31, 52, 29))` `print``(rgb_to_hsv(``129``, ``88``, ``47``))`

## C#

 `// C# program change RGB Color``// Model to HSV Color Model``using` `System;` `class` `GFG``{` `    ``static` `void` `rgb_to_hsv(``double` `r, ``double` `g, ``double` `b)``    ``{` `        ``// R, G, B values are divided by 255``        ``// to change the range from 0..255 to 0..1``        ``r = r / 255.0;``        ``g = g / 255.0;``        ``b = b / 255.0;` `        ``// h, s, v = hue, saturation, value``        ``double` `cmax = Math.Max(r, Math.Max(g, b)); ``// maximum of r, g, b``        ``double` `cmin = Math.Min(r, Math.Min(g, b)); ``// minimum of r, g, b``        ``double` `diff = cmax - cmin; ``// diff of cmax and cmin.``        ``double` `h = -1, s = -1;``        ` `        ``// if cmax and cmax are equal then h = 0``        ``if` `(cmax == cmin)``            ``h = 0;` `        ``// if cmax equal r then compute h``        ``else` `if` `(cmax == r)``            ``h = (60 * ((g - b) / diff) + 360) % 360;` `        ``// if cmax equal g then compute h``        ``else` `if` `(cmax == g)``            ``h = (60 * ((b - r) / diff) + 120) % 360;` `        ``// if cmax equal b then compute h``        ``else` `if` `(cmax == b)``            ``h = (60 * ((r - g) / diff) + 240) % 360;` `        ``// if cmax equal zero``        ``if` `(cmax == 0)``            ``s = 0;``        ``else``            ``s = (diff / cmax) * 100;` `        ``// compute v``        ``double` `v = cmax * 100;``        ``Console.WriteLine(``"("` `+ h + ``" "` `+ s + ``" "` `+ v + ``")"``);` `    ``}` `    ``// Driver Code``    ``public` `static` `void` `Main(String[] args)``    ``{``        ``// rgb_to_hsv(45, 215, 0);``        ``// rgb_to_hsv(31, 52, 29);``        ``rgb_to_hsv(129, 88, 47);` `    ``}``}` `// This code is contributed by Rajput-Ji`

## Javascript

 ``

Output :

`(30.0, 63.56589147286821, 50.588235294117645) `

My Personal Notes arrow_drop_up