Rumah > Artikel > pembangunan bahagian belakang > Cara menggunakan Golang untuk menyamakan kecerahan dan menyahwarna imej
. Penyamaan kecerahan merujuk kepada melaraskan kecerahan imej kepada julat yang sesuai untuk meningkatkan kesan visual imej. Proses penyahwarnaan mengalih keluar maklumat warna imej dan mengekalkan hanya maklumat skala kelabu, yang digunakan untuk beberapa senario aplikasi khas.
Artikel ini akan memperkenalkan cara menggunakan bahasa pengaturcaraan Golang untuk mencapai penyamaan kecerahan dan penyahwarnaan imej.
2. Keseimbangan Kecerahan
Matlamat keseimbangan kecerahan adalah untuk melaraskan julat kecerahan imej daripada ekstrem yang lebih gelap atau lebih terang kepada julat yang sesuai. Algoritma penyamaan kecerahan biasa ialah penyamaan histogram.
Berikut ialah contoh kod yang menunjukkan cara menggunakan Golang untuk melaksanakan algoritma penyamaan histogram:
package main import ( "image" "image/color" "image/jpeg" "log" "os" ) func main() { // 打开图片文件 file, err := os.Open("input.jpg") if err != nil { log.Fatal(err) } defer file.Close() // 解码图片 img, err := jpeg.Decode(file) if err != nil { log.Fatal(err) } // 创建一个新的灰度图像 bounds := img.Bounds() gray := image.NewGray(bounds) // 计算每个灰度级的像素个数 count := make([]int, 256) for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { grayColor := color.GrayModel.Convert(img.At(x, y)).(color.Gray) count[grayColor.Y]++ } } // 计算累积分布函数 cdf := make([]int, 256) cdf[0] = count[0] for i := 1; i < 256; i++ { cdf[i] = cdf[i-1] + count[i] } // 将累积分布函数映射到[0, 255]的范围 for i := 0; i < 256; i++ { cdf[i] = cdf[i] * 255 / (bounds.Dx() * bounds.Dy()) } // 对每个像素进行亮度均衡化处理 for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { grayColor := color.GrayModel.Convert(img.At(x, y)).(color.Gray) grayColor.Y = uint8(cdf[grayColor.Y]) gray.Set(x, y, grayColor) } } // 保存处理后的图像 outputFile, err := os.Create("output.jpg") if err != nil { log.Fatal(err) } defer outputFile.Close() err = jpeg.Encode(outputFile, gray, nil) if err != nil { log.Fatal(err) } }
Dalam kod di atas, kami mula-mula membuka fail imej dan kemudian menyahkodnya menjadi objek imej. Seterusnya, kami mencipta objek imej skala kelabu baharu dan mengira bilangan piksel untuk setiap tahap skala kelabu dalam imej asal. Seterusnya, kami mengira fungsi pengedaran kumulatif dan memetakannya ke julat [0, 255]. Akhir sekali, kami melakukan penyamaan kecerahan pada setiap piksel dan menyimpan imej yang diproses.
3. Penyahwarnaan
Penyahwarnaan membuang maklumat warna imej dan hanya mengekalkan maklumat skala kelabu. Berikut ialah contoh kod yang menunjukkan cara menggunakan Golang untuk melaksanakan penyahwarnaan:
package main import ( "image" "image/color" "image/jpeg" "log" "os" ) func main() { // 打开图片文件 file, err := os.Open("input.jpg") if err != nil { log.Fatal(err) } defer file.Close() // 解码图片 img, err := jpeg.Decode(file) if err != nil { log.Fatal(err) } // 创建一个新的灰度图像 bounds := img.Bounds() gray := image.NewGray(bounds) // 对每个像素进行去色处理 for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { grayColor := color.GrayModel.Convert(img.At(x, y)).(color.Gray) grayColor.Y = uint8(grayColor.Y) gray.Set(x, y, grayColor) } } // 保存处理后的图像 outputFile, err := os.Create("output.jpg") if err != nil { log.Fatal(err) } defer outputFile.Close() err = jpeg.Encode(outputFile, gray, nil) if err != nil { log.Fatal(err) } }
Dalam kod di atas, kami menggunakan kaedah yang sama untuk membuka dan menyahkod fail imej dan mencipta objek imej skala kelabu baharu. Kemudian, kami menyahwarna setiap piksel, iaitu, menetapkan maklumat warna piksel kepada maklumat skala kelabu piksel. Akhirnya, kami menyimpan imej yang diproses.
4. Ringkasan
Artikel ini memperkenalkan cara menggunakan Golang untuk mencapai penyamaan kecerahan dan penyahwarnaan imej. Melalui algoritma penyamaan histogram dan algoritma pemprosesan penyahwarnaan, kami boleh melaraskan kecerahan imej dengan berkesan dan mengeluarkan maklumat warna imej. Menggunakan Golang untuk melaksanakan fungsi pemprosesan imej boleh memproses sejumlah besar data imej dengan pantas dan cekap untuk memenuhi keperluan pelbagai senario aplikasi praktikal. Saya harap artikel ini dapat membantu pembaca memahami dan menggunakan algoritma pemprosesan imej.
Atas ialah kandungan terperinci Cara menggunakan Golang untuk menyamakan kecerahan dan menyahwarna imej. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!