Mari kita bincangkan tentang cara membandingkan warna di Golang

PHPz
Lepaskan: 2023-03-30 09:31:15
asal
907 orang telah melayarinya

Golang ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google dan digunakan secara meluas dalam pembangunan web, pengkomputeran awan, pemprosesan data besar dan bidang lain. Di Golang, memproses imej adalah tugas yang sangat biasa, dan memproses warna dalam imej juga merupakan tugas penting. Artikel ini akan memperkenalkan cara membandingkan warna di Golang.

1. Perwakilan warna

Di Golang, kaedah perwakilan warna yang biasa digunakan ialah nilai RGB dan nilai hex. Nilai RGB (Merah, Hijau, Biru) merujuk kepada nilai tiga warna utama, biasanya dinyatakan sebagai tiga integer (0~255):

type RGB struct {
    R, G, B uint8
}
Salin selepas log masuk

nilai hex ialah nilai warna yang dinyatakan dalam perenambelasan, Biasanya dinyatakan sebagai rentetan enam digit (seperti "#FFFFFF" bermaksud putih):

type Hex struct {
    R, G, B uint8
}
Salin selepas log masuk

Selain itu, terdapat juga kaedah perwakilan warna sebagai HSV (Hue, Saturation, Value) nilai, yang merupakan kaedah perwakilan warna yang agak intuitif, tetapi ia tidak akan diperkenalkan terlalu banyak dalam artikel ini.

2. Perbandingan warna

Membandingkan persamaan dua warna biasanya boleh dicapai dengan mengira jaraknya. Di Golang, kita boleh menggunakan jarak Euclidean atau jarak Manhattan untuk mengira jarak antara warna.

Jarak Euclidean merujuk kepada jarak garis lurus antara dua titik:

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)
}
Salin selepas log masuk

Jarak Manhattan merujuk kepada jarak mendatar dan menegak antara dua titik Jumlah:

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
}
Salin selepas log masuk

Sudah tentu, kita juga boleh menggunakan fungsi di atas pada perwakilan warna nilai hex:

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
}
Salin selepas log masuk

3. Aplikasi kontras warna

Kontras warna selalunya Ia digunakan dalam senario seperti penggantian warna dan analisis warna dalam pemprosesan imej. Sebagai contoh, kita boleh menggantikan warna tertentu dengan warna lain melalui fungsi penggantian warna:

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
}
Salin selepas log masuk

Kita juga boleh menggunakan fungsi analisis warna untuk mencari piksel warna tertentu dalam gambar dan mengiranya Kuantiti:

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
}
Salin selepas log masuk

4. Ringkasan

Artikel ini memperkenalkan cara membandingkan warna dalam Golang dan cara menggunakan fungsi kontras warna untuk pemprosesan imej. Kontras warna ialah teknologi penting dalam pemprosesan imej, dan menguasainya adalah sangat penting untuk meningkatkan kecekapan dan ketepatan pemprosesan imej.

Atas ialah kandungan terperinci Mari kita bincangkan tentang cara membandingkan warna di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!