Convert RGB Color to English Color Name in Python
You want to transform an RGB color tuple into a color name, such as 'yellow' or 'blue'.
Consider the following code:
<code class="python">import Image im = Image.open("test.jpg") n, color = max(im.getcolors(im.size[0]*im.size[1])) print color # (119, 172, 152)</code>
This code extracts the dominant color from an image and stores it as a tuple. How can you convert this tuple to a color name in Python?
Solution:
The webcolors package offers a useful function called rgb_to_name():
rgb_to_name(rgb_triplet, spec='css3')
This function converts a three-tuple of integer RGB values into its corresponding color name within a specified color specification (e.g., 'css3'). For example:
<code class="python">import webcolors rgb_to_name((0, 0, 0)) # 'black'</code>
To find the closest color name to a given RGB tuple, you can use a custom function like the following:
<code class="python">import math import webcolors def closest_colour(requested_colour): min_colours = {} for key, name in webcolors.CSS3_HEX_TO_NAMES.items(): r_c, g_c, b_c = webcolors.hex_to_rgb(key) rd = (r_c - requested_colour[0]) ** 2 gd = (g_c - requested_colour[1]) ** 2 bd = (b_c - requested_colour[2]) ** 2 min_colours[(rd + gd + bd)] = name return min_colours[min(min_colours.keys())]</code>
You can then utilize the following function to retrieve both the actual color name if it exists and the closest matching name:
<code class="python">def get_colour_name(requested_colour): try: closest_name = actual_name = webcolors.rgb_to_name(requested_colour) except ValueError: closest_name = closest_colour(requested_colour) actual_name = None return actual_name, closest_name</code>
With this function, you can obtain both the exact color name or the closest approximation for a given RGB tuple.
The above is the detailed content of How to Convert an RGB Color Tuple to an English Color Name in Python?. For more information, please follow other related articles on the PHP Chinese website!