Pemprosesan imej Golang: Cara melakukan imbangan warna dan penyamaan histogram gambar
Pengenalan:
Dalam bidang pemprosesan imej, imbangan warna dan penyamaan histogram adalah dua teknik yang biasa digunakan. Pengimbangan warna digunakan untuk melaraskan taburan warna dalam imej untuk rupa yang lebih semula jadi, manakala penyamaan histogram digunakan untuk meningkatkan kontras dan taburan kecerahan imej. Artikel ini akan memperkenalkan cara menggunakan Golang untuk melaksanakan keseimbangan warna dan penyamaan histogram imej, dan memberikan contoh kod yang sepadan.
Berikut ialah contoh kod untuk pengimbangan warna imej menggunakan Golang:
// 导入所需的包 import ( "image" "image/color" "math" ) // 颜色平衡函数 func balanceColors(img image.Image) image.Image { bounds := img.Bounds() width, height := bounds.Max.X, bounds.Max.Y // 创建一个新的RGBA图像 balancedImg := image.NewRGBA(image.Rect(0, 0, width, height)) rTotal, gTotal, bTotal := 0, 0, 0 numPixels := width * height // 遍历图像的每一个像素 for y := 0; y < height; y++ { for x := 0; x < width; x++ { // 获取像素的RGB值 r, g, b, _ := img.At(x, y).RGBA() // 累加RGB值 rTotal += int(r >> 8) gTotal += int(g >> 8) bTotal += int(b >> 8) } } // 计算平均RGB值 rAvg := float64(rTotal) / float64(numPixels) gAvg := float64(gTotal) / float64(numPixels) bAvg := float64(bTotal) / float64(numPixels) // 遍历图像的每一个像素 for y := 0; y < height; y++ { for x := 0; x < width; x++ { // 获取像素的RGB值 r, g, b, a := img.At(x, y).RGBA() // 计算调整后的RGB值 rBalanced := uint8(math.Min(float64(r>>8)*(rAvg/255), 255)) gBalanced := uint8(math.Min(float64(g>>8)*(gAvg/255), 255)) bBalanced := uint8(math.Min(float64(b>>8)*(bAvg/255), 255)) // 设置新图像的像素值 balancedImg.Set(x, y, color.RGBA{rBalanced, gBalanced, bBalanced, uint8(a>>8)}) } } return balancedImg }
Berikut ialah contoh kod penggunaan Golang untuk penyamaan histogram imej:
// 导入所需的包 import ( "image" "image/color" "math" ) // 直方图均衡化函数 func equalizeHistogram(img image.Image) image.Image { bounds := img.Bounds() width, height := bounds.Max.X, bounds.Max.Y // 创建一个新的RGBA图像 equalizedImg := image.NewRGBA(image.Rect(0, 0, width, height)) // 计算像素值的累计分布 var hist [256]int for y := 0; y < height; y++ { for x := 0; x < width; x++ { // 获取像素的灰度值 r, g, b, _ := img.At(x, y).RGBA() gray := color.GrayModel.Convert(color.RGBA{uint8(r>>8), uint8(g>>8), uint8(b>>8), 0}).(color.Gray) // 累加灰度值分布 hist[gray.Y]++ } } // 计算像素值的累积直方图 var cumHist [256]int cumHist[0] = hist[0] for i := 1; i < 256; i++ { cumHist[i] = cumHist[i-1] + hist[i] } // 计算像素值的映射关系 var mapping [256]uint8 for i := 0; i < 256; i++ { mapping[i] = uint8(math.Round(float64(cumHist[i]) * 255 / float64(width*height))) } // 遍历图像的每一个像素 for y := 0; y < height; y++ { for x := 0; x < width; x++ { // 获取像素的灰度值 r, g, b, a := img.At(x, y).RGBA() gray := color.GrayModel.Convert(color.RGBA{uint8(r>>8), uint8(g>>8), uint8(b>>8), uint8(a>>8)}).(color.Gray) // 获取映射后的灰度值 newGray := mapping[gray.Y] // 设置新图像的像素值 equalizedColor := color.Gray{newGray} equalizedImg.Set(x, y, equalizedColor) } } return equalizedImg }
Kesimpulan:
Artikel ini memperkenalkan cara menggunakan Golang untuk pengimbangan warna imej dan penyamaan histogram, dan menyediakan contoh kod yang sepadan. Pengimbangan warna dan penyamaan histogram ialah dua teknik pemprosesan imej yang biasa digunakan yang boleh membantu meningkatkan taburan warna, kontras dan kecerahan imej. Pembaca boleh menggunakan teknologi ini secara fleksibel untuk memproses imej mengikut keperluan dan keadaan sebenar mereka sendiri untuk mendapatkan kesan visual yang lebih baik.
Atas ialah kandungan terperinci Pemprosesan imej Golang: cara mewarna imbangan dan penyamaan histogram gambar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!