# Program to Change RGB color model to HSV color model

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 `

Output :

`(30.0, 63.56589147286821, 50.588235294117645) `

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : princiraj1992, Rajput-Ji