Program to Change RGB color model to HSV color model

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 : 
Divide r, g, b by 255Compute cmax, cmin, differenceHue calculation : if cmax and cmin equal 0, then h = 0if cmax equal r then compute h = (60 * ((g – b) / diff) + 360) % 360if cmax equal g then compute h = (60 * ((b – r) / diff) + 120) % 360if cmax equal b then compute h = (60 * ((r – g) / diff) + 240) % 360Saturation computation : if cmax = 0, then s = 0if cmax does not equal 0 then compute s = (diff/cmax)*100Value computation : v = cmax*100
Divide r, g, b by 255
Compute cmax, cmin, difference
Hue calculation : if cmax and cmin equal 0, then h = 0if cmax equal r then compute h = (60 * ((g – b) / diff) + 360) % 360if cmax equal g then compute h = (60 * ((b – r) / diff) + 120) % 360if cmax equal b then compute h = (60 * ((r – g) / diff) + 240) % 360
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
Saturation computation : if cmax = 0, then s = 0if cmax does not equal 0 then compute s = (diff/cmax)*100
if cmax = 0, then s = 0
if cmax does not equal 0 then compute s = (diff/cmax)*100
Value computation : v = cmax*100
v = cmax*100
 
 Below is the implementation of above approach : 
 
 
Java
Python3
C#
Javascript
// Java program change RGB Color// Model to HSV Color Modelclass 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 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# program change RGB Color// Model to HSV Color Modelusing 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
<script>// javascript program change RGB Color// Model to HSV Color Model   function 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 = r / 255.0;        g = g / 255.0;        b = b / 255.0;         // h, s, v = hue, saturation, value        var cmax = Math.max(r, Math.max(g, b)); // maximum of r, g, b        var cmin = Math.min(r, Math.min(g, b)); // minimum of r, g, b        var diff = cmax - cmin; // diff of cmax and cmin.        var 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        var v = cmax * 100;        document.write("(" + h.toFixed(1) + ", " + s + ", " + v + ")");     }     // Driver Code             // rgb_to_hsv(45, 215, 0);        // rgb_to_hsv(31, 52, 29);        rgb_to_hsv(129, 88, 47);  // This code is contributed by todaysgaurav</script>
Output : 
(30.0, 63.56589147286821, 50.588235294117645) 
 
princiraj1992
Rajput-Ji
todaysgaurav
Mathematical
School Programming
Technical Scripter
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Algorithm to solve Rubik's Cube
Merge two sorted arrays with O(1) extra space
Program to print prime numbers from 1 to N.
Segment Tree | Set 1 (Sum of given range)
Check if a number is Palindrome
Python Dictionary
Reverse a string in Java
Arrays in C/C++
Introduction To PYTHON
Interfaces in Java