RGB to HSV color
The RGB to HSV color conversion is a commonly used algorithm in computer graphics and image processing. RGB (Red, Green, Blue) and HSV (Hue, Saturation, Value) are different color models that represent colors in different ways. RGB represents colors as a combination of red, green, and blue components, while HSV represents colors as a combination of hue, saturation, and value components. The conversion between these two color models allows for more intuitive manipulation of colors, especially when it comes to adjusting attributes such as brightness and saturation.
Problem Statement
The problem is to convert an RGB color value to its corresponding HSV representation. Given an RGB color with red (R), green (G), and blue (B) components ranging from 0 to 255, the task is to calculate the corresponding hue (H) value in degrees, saturation (S) value as a percentage, and value (V) also as a percentage.
For example, given an RGB color with R = 92, G = 191, and B = 178, the algorithm should output the corresponding HSV values: H = 172.121212°, S = 51.832461%, and V = 74.901961%.
Algorithm
The algorithm for converting RGB to HSV involves several steps:
- Normalize the RGB values by dividing each component by 255 to obtain values between 0 and 1.
- Calculate the maximum and minimum values among the normalized R, G, and B components.
- Calculate the difference (delta) between the maximum and minimum values.
-
Determine the hue (H) value:
- If the maximum value is equal to the red component, calculate H as ((G - B) / delta).
- If the maximum value is equal to the green component, calculate H as ((B - R) / delta) + 2.
- If the maximum value is equal to the blue component, calculate H as ((R - G) / delta) + 4.
- Multiply H by 60 to convert it to degrees.
- If H is negative, add 360 to it.
- Calculate the saturation (S) value as delta divided by the maximum value.
- Calculate the value (V) as the maximum value.
- Convert S and V to percentages by multiplying them by 100.
- Display the RGB and HSV values.
Pseudocode
function max_value(a, b)
if a > b
return a
else
return b
function min_value(a, b)
if a < b
return a
else
return b
function rgb_to_hsv(red, green, blue)
if red > 255 or green > 255 or blue > 255
return
r = 0
g = 0
b = 0
if red != 0
r = red / 255.0
if green != 0
g = green / 255.0
if blue != 0
b = blue / 255.0
max = max_value(max_value(r, g), b)
min = min_value(min_value(r, g), b)
delta = max - min
hue = 0.0
saturation = 0.0
value = 0.0
if delta > 0
if max == r
hue = ((g - b) / delta)
if hue < 0
hue = hue + 6
else if max == g
hue = ((b - r) / delta) + 2
else if max == b
hue = ((r - g) / delta) + 4
hue = hue * 60
if hue < 0
hue += 360
value = max
if value == 0
saturation = 0
else
saturation = delta / value
saturation = saturation * 100
value = value * 100
display("Given RGB")
display("R = " + red)
display("G = " + green)
display("B = " + blue)
display("Resultant HSV")
display("H = " + hue + "°")
display("S = " + saturation + "%")
display("V = " + value + "%")
rgb_to_hsv(92, 191, 178)
rgb_to_hsv(54, 155, 229)
rgb_to_hsv(68, 88, 204)
Code Solution
Here given code implementation process.
// C program
// RGB to HSV color
#include <stdio.h>
// Returns the maximum value of given two numbers
double max_value(double a, double b)
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
// Returns the minimum value of given two numbers
double min_value(double a, double b)
{
if (a < b)
{
return a;
}
else
{
return b;
}
}
void rgb_to_hsv(int red, int green, int blue)
{
if (red > 255 || green > 255 || blue > 255)
{
return;
}
double r = 0;
double g = 0;
double b = 0;
if (red != 0)
{
r = red / 255.0;
}
if (green != 0)
{
g = green / 255.0;
}
if (blue != 0)
{
b = blue / 255.0;
}
// Find maximum of r,g,b
double max = max_value(max_value(r, g), b);
// Find Minimum of r,g,b
double min = min_value(min_value(r, g), b);
// Calculate difference
double dalet = max - min;
// Define useful resultant variables
double hue = 0.0;
double saturation = 0.0;
double value = 0.0;
if (dalet > 0)
{
// Calculate hue
if (max == r)
{
hue = ((g - b) / dalet);
if (hue < 0)
{
hue = hue + 6;
}
}
else if (max == g)
{
hue = ((b - r) / dalet) + 2;
}
else if (max == b)
{
hue = ((r - g) / dalet) + 4;
}
hue = hue *60;
}
if (hue < 0)
{
hue += 360;
}
// Calculate Value
value = max;
if (value == 0)
{
saturation = 0;
}
else
{
saturation = dalet / value;
}
// Convert into %
saturation = saturation *100;
value = value *100;
// Display Given results
printf(" Given RGB");
printf("\n R = %d ", red);
printf("\n G = %d ", green);
printf("\n B = %d ", blue);
// Display Calculate results
printf("\n Resultant HSV ");
printf("\n H = %lf °", hue);
printf("\n S = %lf %% ", saturation);
printf("\n V = %lf %% \n\n", value);
}
int main()
{
// Test Case
rgb_to_hsv(92, 191, 178);
rgb_to_hsv(54, 155, 229);
rgb_to_hsv(68, 88, 204);
return 0;
}
Output
Given RGB
R = 92
G = 191
B = 178
Resultant HSV
H = 172.121212 °
S = 51.832461 %
V = 74.901961 %
Given RGB
R = 54
G = 155
B = 229
Resultant HSV
H = 205.371429 °
S = 76.419214 %
V = 89.803922 %
Given RGB
R = 68
G = 88
B = 204
Resultant HSV
H = 231.176471 °
S = 66.666667 %
V = 80.000000 %
/*
Java Program
RGB to HSV color
*/
public class ColorConversion
{
// Returns the maximum value of given two numbers
public double max_value(double a, double b)
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
// Returns the minimum value of given two numbers
public double min_value(double a, double b)
{
if (a < b)
{
return a;
}
else
{
return b;
}
}
public void rgb_to_hsv(int red, int green, int blue)
{
if (red < 0 || green < 0 || blue < 0 || red > 255 || green > 255 || blue > 255)
{
return;
}
double r = 0;
double g = 0;
double b = 0;
if (red != 0)
{
r = red / 255.0;
}
if (green != 0)
{
g = green / 255.0;
}
if (blue != 0)
{
b = blue / 255.0;
}
// Find maximum of r,g,b
double max = max_value(max_value(r, g), b);
// Find Minimum of r,g,b
double min = min_value(min_value(r, g), b);
// Calculate difference
double dalet = max - min;
// Define useful resultant variables
double hue = 0.0;
double saturation = 0.0;
double value = 0.0;
if (dalet > 0)
{
// Calculate hue
if (max == r)
{
hue = ((g - b) / dalet);
if (hue < 0)
{
hue = hue + 6;
}
}
else if (max == g)
{
hue = ((b - r) / dalet) + 2;
}
else if (max == b)
{
hue = ((r - g) / dalet) + 4;
}
hue = hue * 60;
}
if (hue < 0)
{
hue += 360;
}
// Calculate Value
value = max;
if (value == 0)
{
saturation = 0;
}
else
{
saturation = dalet / value;
}
// Convert into %
saturation = saturation * 100;
value = value * 100;
// Display Given results
System.out.print(" Given RGB");
System.out.print("\n R = " + red );
System.out.print("\n G = " + green );
System.out.print("\n B = " + blue );
// Display Calculate results
System.out.print("\n Resultant HSV ");
System.out.print("\n H = " + hue + " °");
System.out.print("\n S = " + saturation + " % ");
System.out.print("\n V = " + value + " % \n\n");
}
public static void main(String[] args)
{
ColorConversion color = new ColorConversion();
// Test Case
color.rgb_to_hsv(92, 191, 178);
color.rgb_to_hsv(54, 155, 229);
color.rgb_to_hsv(68, 88, 204);
}
}
Output
Given RGB
R = 92
G = 191
B = 178
Resultant HSV
H = 172.12121212121212 °
S = 51.832460732984295 %
V = 74.90196078431373 %
Given RGB
R = 54
G = 155
B = 229
Resultant HSV
H = 205.3714285714286 °
S = 76.41921397379913 %
V = 89.80392156862746 %
Given RGB
R = 68
G = 88
B = 204
Resultant HSV
H = 231.1764705882353 °
S = 66.66666666666667 %
V = 80.0 %
// Include header file
#include <iostream>
using namespace std;
/*
C++ Program
RGB to HSV color
*/
class ColorConversion
{
public:
// Returns the maximum value of given two numbers
double max_value(double a, double b)
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
// Returns the minimum value of given two numbers
double min_value(double a, double b)
{
if (a < b)
{
return a;
}
else
{
return b;
}
}
void rgb_to_hsv(int red, int green, int blue)
{
if (red < 0 || green < 0 || blue < 0 || red > 255 || green > 255 || blue > 255)
{
return;
}
double r = 0;
double g = 0;
double b = 0;
if (red != 0)
{
r = red / 255.0;
}
if (green != 0)
{
g = green / 255.0;
}
if (blue != 0)
{
b = blue / 255.0;
}
// Find maximum of r,g,b
double max = this->max_value(this->max_value(r, g), b);
// Find Minimum of r,g,b
double min = this->min_value(this->min_value(r, g), b);
// Calculate difference
double dalet = max - min;
// Define useful resultant variables
double hue = 0.0;
double saturation = 0.0;
double value = 0.0;
if (dalet > 0)
{
// Calculate hue
if (max == r)
{
hue = ((g - b) / dalet);
if (hue < 0)
{
hue = hue + 6;
}
}
else if (max == g)
{
hue = ((b - r) / dalet) + 2;
}
else if (max == b)
{
hue = ((r - g) / dalet) + 4;
}
hue = hue *60;
}
if (hue < 0)
{
hue += 360;
}
// Calculate Value
value = max;
if (value == 0)
{
saturation = 0;
}
else
{
saturation = dalet / value;
}
// Convert into %
saturation = saturation *100;
value = value *100;
// Display Given results
cout << " Given RGB";
cout << "\n R = " << red;
cout << "\n G = " << green;
cout << "\n B = " << blue;
// Display Calculate results
cout << "\n Resultant HSV ";
cout << "\n H = " << hue << " °";
cout << "\n S = " << saturation << " % ";
cout << "\n V = " << value << " % \n\n";
}
};
int main()
{
ColorConversion color = ColorConversion();
// Test Case
color.rgb_to_hsv(92, 191, 178);
color.rgb_to_hsv(54, 155, 229);
color.rgb_to_hsv(68, 88, 204);
return 0;
}
Output
Given RGB
R = 92
G = 191
B = 178
Resultant HSV
H = 172.121 °
S = 51.8325 %
V = 74.902 %
Given RGB
R = 54
G = 155
B = 229
Resultant HSV
H = 205.371 °
S = 76.4192 %
V = 89.8039 %
Given RGB
R = 68
G = 88
B = 204
Resultant HSV
H = 231.176 °
S = 66.6667 %
V = 80 %
// Include namespace system
using System;
/*
C# Program
RGB to HSV color
*/
public class ColorConversion
{
// Returns the maximum value of given two numbers
public double max_value(double a, double b)
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
// Returns the minimum value of given two numbers
public double min_value(double a, double b)
{
if (a < b)
{
return a;
}
else
{
return b;
}
}
public void rgb_to_hsv(int red, int green, int blue)
{
if (red < 0 || green < 0 || blue < 0 || red > 255 || green > 255 || blue > 255)
{
return;
}
double r = 0;
double g = 0;
double b = 0;
if (red != 0)
{
r = red / 255.0;
}
if (green != 0)
{
g = green / 255.0;
}
if (blue != 0)
{
b = blue / 255.0;
}
// Find maximum of r,g,b
double max = max_value(max_value(r, g), b);
// Find Minimum of r,g,b
double min = min_value(min_value(r, g), b);
// Calculate difference
double dalet = max - min;
// Define useful resultant variables
double hue = 0.0;
double saturation = 0.0;
double value = 0.0;
if (dalet > 0)
{
// Calculate hue
if (max == r)
{
hue = ((g - b) / dalet);
if (hue < 0)
{
hue = hue + 6;
}
}
else if (max == g)
{
hue = ((b - r) / dalet) + 2;
}
else if (max == b)
{
hue = ((r - g) / dalet) + 4;
}
hue = hue * 60;
}
if (hue < 0)
{
hue += 360;
}
// Calculate Value
value = max;
if (value == 0)
{
saturation = 0;
}
else
{
saturation = dalet / value;
}
// Convert into %
saturation = saturation * 100;
value = value * 100;
// Display Given results
Console.Write(" Given RGB");
Console.Write("\n R = " + red);
Console.Write("\n G = " + green);
Console.Write("\n B = " + blue);
// Display Calculate results
Console.Write("\n Resultant HSV ");
Console.Write("\n H = " + hue + " °");
Console.Write("\n S = " + saturation + " % ");
Console.Write("\n V = " + value + " % \n\n");
}
public static void Main(String[] args)
{
ColorConversion color = new ColorConversion();
// Test Case
color.rgb_to_hsv(92, 191, 178);
color.rgb_to_hsv(54, 155, 229);
color.rgb_to_hsv(68, 88, 204);
}
}
Output
Given RGB
R = 92
G = 191
B = 178
Resultant HSV
H = 172.121212121212 °
S = 51.8324607329843 %
V = 74.9019607843137 %
Given RGB
R = 54
G = 155
B = 229
Resultant HSV
H = 205.371428571429 °
S = 76.4192139737991 %
V = 89.8039215686275 %
Given RGB
R = 68
G = 88
B = 204
Resultant HSV
H = 231.176470588235 °
S = 66.6666666666667 %
V = 80 %
<?php
/*
Php Program
RGB to HSV color
*/
class ColorConversion
{
// Returns the maximum value of given two numbers
public function max_value($a, $b)
{
if ($a > $b)
{
return $a;
}
else
{
return $b;
}
}
// Returns the minimum value of given two numbers
public function min_value($a, $b)
{
if ($a < $b)
{
return $a;
}
else
{
return $b;
}
}
public function rgb_to_hsv($red, $green, $blue)
{
if ($red < 0 || $green < 0 || $blue < 0 || $red > 255 || $green > 255 || $blue > 255)
{
return;
}
$r = 0;
$g = 0;
$b = 0;
if ($red != 0)
{
$r = $red / 255.0;
}
if ($green != 0)
{
$g = $green / 255.0;
}
if ($blue != 0)
{
$b = $blue / 255.0;
}
// Find maximum of r,g,b
$max = $this->max_value($this->max_value($r, $g), $b);
// Find Minimum of r,g,b
$min = $this->min_value($this->min_value($r, $g), $b);
// Calculate difference
$dalet = $max - $min;
// Define useful resultant variables
$hue = 0.0;
$saturation = 0.0;
$value = 0.0;
if ($dalet > 0)
{
// Calculate hue
if ($max == $r)
{
$hue = ($g - $b) / $dalet;
if ($hue < 0)
{
$hue = $hue + 6;
}
}
else if ($max == $g)
{
$hue = (($b - $r) / $dalet) + 2;
}
else if ($max == $b)
{
$hue = (($r - $g) / $dalet) + 4;
}
$hue = $hue * 60;
}
if ($hue < 0)
{
$hue += 360;
}
// Calculate Value
$value = $max;
if ($value == 0)
{
$saturation = 0;
}
else
{
$saturation = $dalet / $value;
}
// Convert into %
$saturation = $saturation * 100;
$value = $value * 100;
// Display Given results
echo " Given RGB";
echo "\n R = ". $red;
echo "\n G = ". $green;
echo "\n B = ". $blue;
// Display Calculate results
echo "\n Resultant HSV ";
echo "\n H = ". $hue ." °";
echo "\n S = ". $saturation ." % ";
echo "\n V = ". $value ." % \n\n";
}
}
function main()
{
$color = new ColorConversion();
// Test Case
$color->rgb_to_hsv(92, 191, 178);
$color->rgb_to_hsv(54, 155, 229);
$color->rgb_to_hsv(68, 88, 204);
}
main();
Output
Given RGB
R = 92
G = 191
B = 178
Resultant HSV
H = 172.12121212121 °
S = 51.832460732984 %
V = 74.901960784314 %
Given RGB
R = 54
G = 155
B = 229
Resultant HSV
H = 205.37142857143 °
S = 76.419213973799 %
V = 89.803921568627 %
Given RGB
R = 68
G = 88
B = 204
Resultant HSV
H = 231.17647058824 °
S = 66.666666666667 %
V = 80 %
/*
Node Js Program
RGB to HSV color
*/
class ColorConversion
{
// Returns the maximum value of given two numbers
max_value(a, b)
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
// Returns the minimum value of given two numbers
min_value(a, b)
{
if (a < b)
{
return a;
}
else
{
return b;
}
}
rgb_to_hsv(red, green, blue)
{
if (red < 0 || green < 0 || blue < 0 || red > 255 || green > 255 || blue > 255)
{
return;
}
var r = 0;
var g = 0;
var b = 0;
if (red != 0)
{
r = (red / 255.0);
}
if (green != 0)
{
g = (green / 255.0);
}
if (blue != 0)
{
b = (blue / 255.0);
}
// Find maximum of r,g,b
var max = this.max_value(this.max_value(r, g), b);
// Find Minimum of r,g,b
var min = this.min_value(this.min_value(r, g), b);
// Calculate difference
var dalet = max - min;
// Define useful resultant variables
var hue = 0.0;
var saturation = 0.0;
var value = 0.0;
if (dalet > 0)
{
// Calculate hue
if (max == r)
{
hue = ((g - b) / dalet);
if (hue < 0)
{
hue = hue + 6;
}
}
else if (max == g)
{
hue = ((b - r) / dalet) + 2;
}
else if (max == b)
{
hue = ((r - g) / dalet) + 4;
}
hue = hue * 60;
}
if (hue < 0)
{
hue += 360;
}
// Calculate Value
value = max;
if (value == 0)
{
saturation = 0;
}
else
{
saturation = (dalet / value);
}
// Convert into %
saturation = saturation * 100;
value = value * 100;
// Display Given results
process.stdout.write(" Given RGB");
process.stdout.write("\n R = " + red);
process.stdout.write("\n G = " + green);
process.stdout.write("\n B = " + blue);
// Display Calculate results
process.stdout.write("\n Resultant HSV ");
process.stdout.write("\n H = " + hue + " °");
process.stdout.write("\n S = " + saturation + " % ");
process.stdout.write("\n V = " + value + " % \n\n");
}
}
function main()
{
var color = new ColorConversion();
// Test Case
color.rgb_to_hsv(92, 191, 178);
color.rgb_to_hsv(54, 155, 229);
color.rgb_to_hsv(68, 88, 204);
}
main();
Output
Given RGB
R = 92
G = 191
B = 178
Resultant HSV
H = 172.12121212121212 °
S = 51.832460732984295 %
V = 74.90196078431373 %
Given RGB
R = 54
G = 155
B = 229
Resultant HSV
H = 205.3714285714286 °
S = 76.41921397379913 %
V = 89.80392156862746 %
Given RGB
R = 68
G = 88
B = 204
Resultant HSV
H = 231.1764705882353 °
S = 66.66666666666667 %
V = 80 %
# Python 3 Program
# RGB to HSV color
class ColorConversion :
# Returns the maximum value of given two numbers
def max_value(self, a, b) :
if (a > b) :
return a
else :
return b
# Returns the minimum value of given two numbers
def min_value(self, a, b) :
if (a < b) :
return a
else :
return b
def rgb_to_hsv(self, red, green, blue) :
if (red < 0 or green < 0 or blue < 0 or red > 255 or green > 255 or blue > 255) :
return
r = 0
g = 0
b = 0
if (red != 0) :
r = (red / 255.0)
if (green != 0) :
g = (green / 255.0)
if (blue != 0) :
b = (blue / 255.0)
# Find maximum of r,g,b
max = self.max_value(self.max_value(r, g), b)
# Find Minimum of r,g,b
min = self.min_value(self.min_value(r, g), b)
# Calculate difference
dalet = max - min
# Define useful resultant variables
hue = 0.0
saturation = 0.0
value = 0.0
if (dalet > 0) :
# Calculate hue
if (max == r) :
hue = ((g - b) / dalet)
if (hue < 0) :
hue = hue + 6
elif(max == g) :
hue = ((b - r) / dalet) + 2
elif(max == b) :
hue = ((r - g) / dalet) + 4
hue = hue * 60
if (hue < 0) :
hue += 360
# Calculate Value
value = max
if (value == 0) :
saturation = 0
else :
saturation = (dalet / value)
# Convert into %
saturation = saturation * 100
value = value * 100
# Display Given results
print(" Given RGB", end = "")
print("\n R = ", red, end = "")
print("\n G = ", green, end = "")
print("\n B = ", blue, end = "")
# Display Calculate results
print("\n Resultant HSV ", end = "")
print("\n H = ", hue ," °", end = "")
print("\n S = ", saturation ," % ", end = "")
print("\n V = ", value ," % \n")
def main() :
color = ColorConversion()
# Test Case
color.rgb_to_hsv(92, 191, 178)
color.rgb_to_hsv(54, 155, 229)
color.rgb_to_hsv(68, 88, 204)
if __name__ == "__main__": main()
Output
Given RGB
R = 92
G = 191
B = 178
Resultant HSV
H = 172.12121212121212 °
S = 51.832460732984295 %
V = 74.90196078431373 %
Given RGB
R = 54
G = 155
B = 229
Resultant HSV
H = 205.3714285714286 °
S = 76.41921397379913 %
V = 89.80392156862746 %
Given RGB
R = 68
G = 88
B = 204
Resultant HSV
H = 231.1764705882353 °
S = 66.66666666666667 %
V = 80.0 %
# Ruby Program
# RGB to HSV color
class ColorConversion
# Returns the maximum value of given two numbers
def max_value(a, b)
if (a > b)
return a
else
return b
end
end
# Returns the minimum value of given two numbers
def min_value(a, b)
if (a < b)
return a
else
return b
end
end
def rgb_to_hsv(red, green, blue)
if (red < 0 || green < 0 || blue < 0 || red > 255 || green > 255 || blue > 255)
return
end
r = 0
g = 0
b = 0
if (red != 0)
r = red / 255.0
end
if (green != 0)
g = green / 255.0
end
if (blue != 0)
b = blue / 255.0
end
# Find maximum of r,g,b
max = self.max_value(self.max_value(r, g), b)
# Find Minimum of r,g,b
min = self.min_value(self.min_value(r, g), b)
# Calculate difference
dalet = max - min
# Define useful resultant variables
hue = 0.0
saturation = 0.0
value = 0.0
if (dalet > 0)
# Calculate hue
if (max == r)
hue = ((g - b) / dalet)
if (hue < 0)
hue = hue + 6
end
elsif(max == g)
hue = ((b - r) / dalet) + 2
elsif(max == b)
hue = ((r - g) / dalet) + 4
end
hue = hue * 60
end
if (hue < 0)
hue += 360
end
# Calculate Value
value = max
if (value == 0)
saturation = 0
else
saturation = dalet / value
end
# Convert into %
saturation = saturation * 100
value = value * 100
# Display Given results
print(" Given RGB")
print("\n R = ", red)
print("\n G = ", green)
print("\n B = ", blue)
# Display Calculate results
print("\n Resultant HSV ")
print("\n H = ", hue ," °")
print("\n S = ", saturation ," % ")
print("\n V = ", value ," % \n\n")
end
end
def main()
color = ColorConversion.new()
# Test Case
color.rgb_to_hsv(92, 191, 178)
color.rgb_to_hsv(54, 155, 229)
color.rgb_to_hsv(68, 88, 204)
end
main()
Output
Given RGB
R = 92
G = 191
B = 178
Resultant HSV
H = 172.12121212121212 °
S = 51.832460732984295 %
V = 74.90196078431373 %
Given RGB
R = 54
G = 155
B = 229
Resultant HSV
H = 205.3714285714286 °
S = 76.41921397379913 %
V = 89.80392156862746 %
Given RGB
R = 68
G = 88
B = 204
Resultant HSV
H = 231.1764705882353 °
S = 66.66666666666667 %
V = 80.0 %
/*
Scala Program
RGB to HSV color
*/
class ColorConversion
{
// Returns the maximum value of given two numbers
def max_value(a: Double, b: Double): Double = {
if (a > b)
{
return a;
}
else
{
return b;
}
}
// Returns the minimum value of given two numbers
def min_value(a: Double, b: Double): Double = {
if (a < b)
{
return a;
}
else
{
return b;
}
}
def rgb_to_hsv(red: Int, green: Int, blue: Int): Unit = {
if (red < 0 || green < 0 || blue < 0 || red > 255 || green > 255 || blue > 255)
{
return;
}
var r: Double = 0;
var g: Double = 0;
var b: Double = 0;
if (red != 0)
{
r = (red / 255.0);
}
if (green != 0)
{
g = (green / 255.0);
}
if (blue != 0)
{
b = (blue / 255.0);
}
// Find maximum of r,g,b
var max: Double = this.max_value(this.max_value(r, g), b);
// Find Minimum of r,g,b
var min: Double = this.min_value(this.min_value(r, g), b);
// Calculate difference
var dalet: Double = max - min;
// Define useful resultant variables
var hue: Double = 0.0;
var saturation: Double = 0.0;
var value: Double = 0.0;
if (dalet > 0)
{
// Calculate hue
if (max == r)
{
hue = ((g - b) / dalet);
if (hue < 0)
{
hue = hue + 6;
}
}
else if (max == g)
{
hue = ((b - r) / dalet) + 2;
}
else if (max == b)
{
hue = ((r - g) / dalet) + 4;
}
hue = hue * 60;
}
if (hue < 0)
{
hue += 360;
}
// Calculate Value
value = max;
if (value == 0)
{
saturation = 0;
}
else
{
saturation = (dalet / value);
}
// Convert into %
saturation = saturation * 100;
value = value * 100;
// Display Given results
print(" Given RGB");
print("\n R = " + red);
print("\n G = " + green);
print("\n B = " + blue);
// Display Calculate results
print("\n Resultant HSV ");
print("\n H = " + hue + " °");
print("\n S = " + saturation + " % ");
print("\n V = " + value + " % \n\n");
}
}
object Main
{
def main(args: Array[String]): Unit = {
var color: ColorConversion = new ColorConversion();
// Test Case
color.rgb_to_hsv(92, 191, 178);
color.rgb_to_hsv(54, 155, 229);
color.rgb_to_hsv(68, 88, 204);
}
}
Output
Given RGB
R = 92
G = 191
B = 178
Resultant HSV
H = 172.12121212121212 °
S = 51.832460732984295 %
V = 74.90196078431373 %
Given RGB
R = 54
G = 155
B = 229
Resultant HSV
H = 205.3714285714286 °
S = 76.41921397379913 %
V = 89.80392156862746 %
Given RGB
R = 68
G = 88
B = 204
Resultant HSV
H = 231.1764705882353 °
S = 66.66666666666667 %
V = 80.0 %
/*
Swift 4 Program
RGB to HSV color
*/
class ColorConversion
{
// Returns the maximum value of given two numbers
func max_value(_ a: Double, _ b: Double)->Double
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
// Returns the minimum value of given two numbers
func min_value(_ a: Double, _ b: Double)->Double
{
if (a < b)
{
return a;
}
else
{
return b;
}
}
func rgb_to_hsv(_ red: Int, _ green: Int, _ blue: Int)
{
if (red < 0 || green < 0 || blue < 0 || red > 255 || green > 255 || blue > 255)
{
return;
}
var r: Double = 0;
var g: Double = 0;
var b: Double = 0;
if (red != 0)
{
r = Double(red) / 255.0;
}
if (green != 0)
{
g = Double(green) / 255.0;
}
if (blue != 0)
{
b = Double(blue) / 255.0;
}
// Find maximum of r,g,b
let max: Double = self.max_value(self.max_value(r, g), b);
// Find Minimum of r,g,b
let min: Double = self.min_value(self.min_value(r, g), b);
// Calculate difference
let dalet: Double = max - min;
// Define useful resultant variables
var hue: Double = 0.0;
var saturation: Double = 0.0;
var value: Double = 0.0;
if (dalet > 0)
{
// Calculate hue
if (max == r)
{
hue = ((g - b) / dalet);
if (hue < 0)
{
hue = hue + 6;
}
}
else if (max == g)
{
hue = ((b - r) / dalet) + 2;
}
else if (max == b)
{
hue = ((r - g) / dalet) + 4;
}
hue = hue * 60;
}
if (hue < 0)
{
hue += 360;
}
// Calculate Value
value = max;
if (value == 0)
{
saturation = 0;
}
else
{
saturation = dalet / value;
}
// Convert into %
saturation = saturation * 100;
value = value * 100;
// Display Given results
print(" Given RGB", terminator: "");
print("\n R = ", red, terminator: "");
print("\n G = ", green, terminator: "");
print("\n B = ", blue, terminator: "");
// Display Calculate results
print("\n Resultant HSV ", terminator: "");
print("\n H = ", hue ," °", terminator: "");
print("\n S = ", saturation ," % ", terminator: "");
print("\n V = ", value ," % \n");
}
}
func main()
{
let color: ColorConversion = ColorConversion();
// Test Case
color.rgb_to_hsv(92, 191, 178);
color.rgb_to_hsv(54, 155, 229);
color.rgb_to_hsv(68, 88, 204);
}
main();
Output
Given RGB
R = 92
G = 191
B = 178
Resultant HSV
H = 172.121212121212 °
S = 51.8324607329843 %
V = 74.9019607843137 %
Given RGB
R = 54
G = 155
B = 229
Resultant HSV
H = 205.371428571429 °
S = 76.4192139737991 %
V = 89.8039215686275 %
Given RGB
R = 68
G = 88
B = 204
Resultant HSV
H = 231.176470588235 °
S = 66.6666666666667 %
V = 80.0 %
/*
Kotlin Program
RGB to HSV color
*/
class ColorConversion
{
// Returns the maximum value of given two numbers
fun max_value(a: Double, b: Double): Double
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
// Returns the minimum value of given two numbers
fun min_value(a: Double, b: Double): Double
{
if (a < b)
{
return a;
}
else
{
return b;
}
}
fun rgb_to_hsv(red: Int, green: Int, blue: Int): Unit
{
if (red < 0 || green < 0 || blue < 0 || red > 255 || green > 255 || blue > 255)
{
return;
}
var r: Double = 0.0;
var g: Double = 0.0;
var b: Double = 0.0;
if (red != 0)
{
r = red / 255.0;
}
if (green != 0)
{
g = green / 255.0;
}
if (blue != 0)
{
b = blue / 255.0;
}
// Find maximum of r,g,b
var max: Double = this.max_value(this.max_value(r, g), b);
// Find Minimum of r,g,b
var min: Double = this.min_value(this.min_value(r, g), b);
// Calculate difference
var dalet: Double = max - min;
// Define useful resultant variables
var hue: Double = 0.0;
var saturation: Double = 0.0;
// Calculate Value
var value: Double = max;
if (dalet > 0)
{
// Calculate hue
if (max == r)
{
hue = ((g - b) / dalet);
if (hue < 0)
{
hue = hue + 6;
}
}
else if (max == g)
{
hue = ((b - r) / dalet) + 2;
}
else if (max == b)
{
hue = ((r - g) / dalet) + 4;
}
hue = hue * 60;
}
if (hue < 0)
{
hue += 360;
}
if (value != 0.0)
{
saturation = dalet / value;
}
// Convert into %
saturation = saturation * 100;
value = value * 100;
// Display Given results
print(" Given RGB");
print("\n R = " + red);
print("\n G = " + green);
print("\n B = " + blue);
// Display Calculate results
print("\n Resultant HSV ");
print("\n H = " + hue + " °");
print("\n S = " + saturation + " % ");
print("\n V = " + value + " % \n\n");
}
}
fun main(args: Array < String > ): Unit
{
var color: ColorConversion = ColorConversion();
// Test Case
color.rgb_to_hsv(92, 191, 178);
color.rgb_to_hsv(54, 155, 229);
color.rgb_to_hsv(68, 88, 204);
}
Output
Given RGB
R = 92
G = 191
B = 178
Resultant HSV
H = 172.12121212121212 °
S = 51.832460732984295 %
V = 74.90196078431373 %
Given RGB
R = 54
G = 155
B = 229
Resultant HSV
H = 205.3714285714286 °
S = 76.41921397379913 %
V = 89.80392156862746 %
Given RGB
R = 68
G = 88
B = 204
Resultant HSV
H = 231.1764705882353 °
S = 66.66666666666667 %
V = 80.0 %
Resultant Output Explanation
For the given RGB color (92, 191, 178), the calculated HSV values are as follows: Hue (H) = 172.121212 degrees, Saturation (S) = 51.832461%, Value (V) = 74.901961%. These values represent the corresponding HSV color for the given RGB color.
Similarly, the HSV values for the other two RGB colors are calculated and displayed in the output.
Time Complexity
The time complexity of the given code is constant, O(1), as it performs a fixed set of operations regardless of the input size. The code involves basic arithmetic calculations, conditional statements, and function calls, which have a constant time complexity.
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment