Golang で色を比較する方法について話しましょう

PHPz
リリース: 2023-03-30 09:31:15
オリジナル
907 人が閲覧しました

Golang は、Google によって開発されたオープンソース プログラミング言語で、Web 開発、クラウド コンピューティング、ビッグ データ処理などの分野で広く使用されています。 Golang では画像の処理は非常に一般的な作業であり、画像内の色の処理も重要な作業です。この記事ではGolangで色を比較する方法を紹介します。

1. 色の表現

Golang では、一般的に色の表現方法として RGB 値と 16 進値が使用されます。 RGB (赤、緑、青) 値は 3 つの原色の値を指し、通常は 3 つの整数 (0 ~ 255) で表されます。

type RGB struct {
    R, G, B uint8
}
ログイン後にコピー

hex 値は 16 進数で表される色の値で、通常は表されます。 6 桁の文字列です (「#FFFFFF」は白を意味します):

type Hex struct {
    R, G, B uint8
}
ログイン後にコピー

また、色を相対的に表現する HSV (色相、彩度、明度) 値としての色表現方法もあります。直感的な色の表現方法ですが、この記事ではあまり紹介しません。

2. 色の比較

2 つの色の類似性の比較は、通常、それらの距離を計算することで実現できます。 Golang では、ユークリッド距離またはマンハッタン距離を使用して色間の距離を計算できます。

ユークリッド距離は 2 点間の直線距離を指します:

func euclideanDistance(c1, c2 RGB) float64 {
    r := float64(c1.R) - float64(c2.R)
    g := float64(c1.G) - float64(c2.G)
    b := float64(c1.B) - float64(c2.B)
    return math.Sqrt(r*r + g*g + b*b)
}
ログイン後にコピー

マンハッタン距離は 2 点間の水平距離と垂直距離の合計を指します:

func manhattanDistance(c1, c2 RGB) float64 {
    r := math.Abs(float64(c1.R) - float64(c2.R))
    g := math.Abs(float64(c1.G) - float64(c2.G))
    b := math.Abs(float64(c1.B) - float64(c2.B))
    return r + g + b
}
ログイン後にコピー

Ofもちろん、上記の関数を 16 進値の色表現に適用することもできます:

func euclideanDistance(c1, c2 Hex) float64 {
    r1, g1, b1 := hexToRGB(c1)
    r2, g2, b2 := hexToRGB(c2)
    r := float64(r1) - float64(r2)
    g := float64(g1) - float64(g2)
    b := float64(b1) - float64(b2)
    return math.Sqrt(r*r + g*g + b*b)
}

func manhattanDistance(c1, c2 Hex) float64 {
    r1, g1, b1 := hexToRGB(c1)
    r2, g2, b2 := hexToRGB(c2)
    r := math.Abs(float64(r1) - float64(r2))
    g := math.Abs(float64(g1) - float64(g2))
    b := math.Abs(float64(b1) - float64(b2))
    return r + g + b
}

func hexToRGB(c Hex) (uint8, uint8, uint8) {
    return c.R, c.G, c.B
}
ログイン後にコピー

3. カラー コントラストのアプリケーション

カラー コントラストは、色の置換や色などの画像処理シナリオでよく使用されます。分析。たとえば、色置換関数を使用して、特定の色を別の色に置き換えることができます。

func replaceColor(img image.Image, oldColor, newColor RGB, threshold float64) image.Image {
    bounds := img.Bounds()
    out := image.NewRGBA(bounds)
    for x := bounds.Min.X; x < bounds.Max.X; x++ {
        for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
            pixel := img.At(x, y)
            c := RGBModel.Convert(pixel).(RGB)
            distance := euclideanDistance(c, oldColor)
            if distance <= threshold {
                out.Set(x, y, newColor)
            } else {
                out.Set(x, y, pixel)
            }
        }
    }
    return out
}
ログイン後にコピー

また、色分析関数を使用して、画像内の特定の色のピクセルを見つけ、その数を数えることができます :

func getColorCount(img image.Image, color RGB, threshold float64) int {
    bounds := img.Bounds()
    count := 0
    for x := bounds.Min.X; x < bounds.Max.X; x++ {
        for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
            pixel := img.At(x, y)
            c := RGBModel.Convert(pixel).(RGB)
            distance := euclideanDistance(c, color)
            if distance <= threshold {
                count++
            }
        }
    }
    return count
}
ログイン後にコピー

4. まとめ

この記事では、Golang で色を比較する方法と、画像処理にカラー コントラスト関数を適用する方法を紹介します。カラーコントラストは画像処理において重要な技術であり、これを習得することは画像処理の効率と精度を向上させる上で非常に重要です。

以上がGolang で色を比較する方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!