Skip to content
Related Articles

Related Articles

Program to Change RGB color model to HSV color model

View Discussion
Improve Article
Save Article
Like Article
  • 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




<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) 

 


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!