> 백엔드 개발 > C++ > 배열에서 가장 가까운 색상 일치를 찾는 방법은 무엇입니까?

배열에서 가장 가까운 색상 일치를 찾는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-26 18:21:11
원래의
308명이 탐색했습니다.

How to Find the Closest Color Match in an Array?

색상 개체를 비교하고 색상 배열에서 가장 가까운 일치를 결정하는 방법

색상 거리를 이해하는 것은 색상 선택과 같은 작업에 매우 중요할 수 있습니다. 그리고 이미지 처리. 색거리에 대한 명확한 정의는 없지만 여러 가지 방법으로 측정할 수 있습니다.

1. 색상만 비교

채도와 명도는 무시하고 색상의 구성요소에만 초점을 맞추는 방법입니다. 구현은 다음과 같습니다.

int closestColor1(List<Color> colors, Color target)
{
    var hue1 = target.GetHue();
    var diffs = colors.Select(n => getHueDistance(n.GetHue(), hue1));
    var diffMin = diffs.Min(n => n);
    return diffs.ToList().FindIndex(n => n == diffMin);
}

float getHueDistance(float hue1, float hue2)
{
    float d = Math.Abs(hue1 - hue2);
    return d > 180 ? 360 - d : d;
}
로그인 후 복사

2. RGB 거리

이 방법은 RGB 공간에서 색상 간의 직접적인 거리를 측정합니다.

int closestColor2(List<Color> colors, Color target)
{
    var colorDiffs = colors.Select(n => ColorDiff(n, target)).Min(n => n);
    return colors.FindIndex(n => ColorDiff(n, target) == colorDiffs);
}

int ColorDiff(Color c1, Color c2)
{
    return (int)Math.Sqrt((c1.R - c2.R) * (c1.R - c2.R) +
                       (c1.G - c2.G) * (c1.G - c2.G) +
                       (c1.B - c2.B) * (c1.B - c2.B));
}
로그인 후 복사

3. 가중치 거리

이 방법은 사용자 정의 가능한 가중치를 사용하여 색상, 채도 및 밝기를 고려합니다.

int closestColor3(List<Color> colors, Color target)
{
    float hue1 = target.GetHue();
    var num1 = ColorNum(target);
    var diffs = colors.Select(n => Math.Abs(ColorNum(n) - num1) + 
                                   getHueDistance(n.GetHue(), hue1) );
    var diffMin = diffs.Min(x => x);
    return diffs.ToList().FindIndex(n => n == diffMin);
}

float ColorNum(Color c) { return c.GetSaturation() * factorSat + 
                                      getBrightness(c) * factorBri; }

float getBrightness(Color c)  
{ 
    return (c.R * 0.299f + c.G * 0.587f + c.B *0.114f) / 256f;
}
로그인 후 복사

이러한 방법을 사용하려면 색상 배열을 List 대상 Color를 인수로 사용하여 closeColor1, closeColor2 또는 closeColor3을 호출합니다. 반환된 인덱스는 배열 내에서 가장 가까운 일치 항목을 나타냅니다.

최적의 방법 선택은 특정 애플리케이션과 가장 관련성이 높은 색상 측면에 따라 다릅니다.

위 내용은 배열에서 가장 가까운 색상 일치를 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿