program story

Python을 사용하여 RGB 색상을 'green'과 같은 영어 색상 이름으로 변환

inputbox 2021. 1. 7. 07:55
반응형

Python을 사용하여 RGB 색상을 'green'과 같은 영어 색상 이름으로 변환


색상 튜플을 '노란색'또는 '파란색'과 같은 색상 이름으로 변환하고 싶습니다.

>>> im = Image.open("test.jpg")
>>> n, color = max(im.getcolors(im.size[0]*im.size[1]))
>>> print color
(119, 172, 152)

파이썬에서 이것을 수행하는 간단한 방법이 있습니까?


웹 색상 을 사용하면 다음과 같이 할 수 있습니다.

rgb_to_name (rgb_triplet, spec = 'css3')

rgb () 색상 삼중 항에 사용하기에 적합한 3 튜플의 정수를 해당하는 정규화 된 색상 이름으로 변환합니다 (해당 이름이있는 경우). 유효한 값은 html4, css2, css21 및 css3이며 기본값은 css3입니다.

예:

>>> rgb_to_name((0, 0, 0))
'black'

그 반대의 경우도 마찬가지입니다.

>>> name_to_rgb('navy')
(0, 0, 128)

가장 가까운 색상 이름을 찾으려면 :

그러나 webcolors요청 된 색상과 일치하는 것을 찾을 수없는 경우 예외가 발생합니다. 요청한 RGB 색상에 가장 가까운 이름을 제공하는 약간의 수정 사항을 작성했습니다. RGB 공간에서 유클리드 거리로 일치합니다.

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

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

requested_colour = (119, 172, 152)
actual_name, closest_name = get_colour_name(requested_colour)

print "Actual colour name:", actual_name, ", closest colour name:", closest_name

산출:

Actual colour name: None , closest colour name: cadetblue

Python을 위해 RGB를 영어로 된 색상 이름으로 변경할 수있는 pynche라는 프로그램이 있습니다.

원하는 것을 할 수있는 방법 ColorDB.nearest()사용해 볼 수 있습니다 ColorDB.py.

이 방법에 대한 자세한 정보는 여기에서 찾을 수 있습니다. ColorDB Pynche


나처럼 좀 더 친숙한 색상 이름을 원하는 사람을 위해, 당신은 사용할 수있는 CSS 2.1 색상 이름 도에 의해 제공을 webcolors:

  • 아쿠아 : #00ffff
  • 검정: #000000
  • 푸른: #0000ff
  • 푹샤: #ff00ff
  • 초록: #008000
  • 회색: #808080
  • 라임: #00ff00
  • 적갈색: #800000
  • 해군: #000080
  • 올리브: #808000
  • 보라색: #800080
  • 빨간: #ff0000
  • 은: #c0c0c0
  • 물오리: #008080
  • 하얀: #ffffff
  • 노랑: #ffff00
  • 주황색: #ffa500

Just use fraxel's excellent answer and code for getting the closest colour, adapted to CSS 2.1:

def get_colour_name(rgb_triplet):
    min_colours = {}
    for key, name in webcolors.css21_hex_to_names.items():
        r_c, g_c, b_c = webcolors.hex_to_rgb(key)
        rd = (r_c - rgb_triplet[0]) ** 2
        gd = (g_c - rgb_triplet[1]) ** 2
        bd = (b_c - rgb_triplet[2]) ** 2
        min_colours[(rd + gd + bd)] = name
    return min_colours[min(min_colours.keys())]

A solution to your problem consists in mapping the RGB values to the HSL color space.

Once you have the color in the HSL color space you can use the H (hue) component to map it the color. Note that color is a somewhat subjective concept, so you would have to define which ranges of H corresponds to a given color.

ReferenceURL : https://stackoverflow.com/questions/9694165/convert-rgb-color-to-english-color-name-like-green-with-python

반응형