Pemprosesan imej Golang: Cara melaksanakan pemetaan kecerunan warna dan skala kelabu bagi imej
Pengenalan: Dengan perkembangan media digital, pemprosesan imej telah menjadi bahagian yang amat diperlukan dalam kehidupan seharian kita. Dalam bahasa Go, kita boleh menggunakan beberapa pustaka untuk pemprosesan imej, seperti github.com/disintegration/imaging. Artikel ini akan memperkenalkan cara menggunakan pustaka ini untuk melaksanakan pemetaan imej kecerunan warna dan skala kelabu.
1. Perkenalkan perpustakaan
Pertama, kita perlu memperkenalkan perpustakaan github.com/disintegration/imaging ke dalam projek Go. Anda boleh menggunakan arahan berikut untuk memasang:
go get -u github.com/disintegration/imaging
2. Kecerunan warna
Jika kita ingin mencipta kesan kecerunan warna dalam gambar, kita boleh melakukannya melalui perkara berikut langkah:
1 .Baca gambar
Menggunakan fungsi Buka perpustakaan pengimejan, kita boleh membaca gambar. Kod berikut menunjukkan cara membaca imej:
import ( "github.com/disintegration/imaging" ) func main() { srcImg, err := imaging.Open("input.jpg") if err != nil { panic(err) } }
2. Cipta imej kecerunan
Seterusnya, kita boleh menggunakan fungsi Baharu perpustakaan pengimejan untuk mencipta imej baharu sebagai imej sasaran untuk kesan kecerunan. Kod berikut menunjukkan cara mencipta imej sasaran dan menentukan lebar dan ketinggiannya:
dstImg := imaging.New(800, 600, color.NRGBA{R: 0, G: 0, B: 0, A: 0})
Dalam contoh ini, kami mencipta imej 800x600 dengan warna hitam (semua nilai RGB adalah 0).
3. Kesan kecerunan
Terus menggunakan fungsi perpustakaan pengimejan, kami boleh memetakan warna piksel imej sumber kepada imej sasaran seterusnya untuk mencapai kesan kecerunan. Kod berikut menunjukkan cara untuk mencapai kesan kecerunan linear:
for y := 0; y < srcImg.Bounds().Dy(); y++ { for x := 0; x < srcImg.Bounds().Dx(); x++ { c := srcImg.At(x, y) r, g, b, a := c.RGBA() // 根据像素位置和颜色进行渐变计算 c = color.RGBA{ R: uint8(x * 255 / srcImg.Bounds().Dx()), G: uint8(y * 255 / srcImg.Bounds().Dy()), B: uint8(b / 65535 * 255), A: uint8(a / 65535 * 255), } dstImg.Set(x, y, c) } }
4 Simpan imej
Akhir sekali, kita boleh menggunakan fungsi Simpan pustaka pengimejan untuk menyimpan imej sasaran ke fail:
err = imaging.Save(dstImg, "output.jpg") if err != nil { panic(err) }
Dengan cara ini. , kami telah melengkapkan pemprosesan kecerunan warna imej bagi gambar.
3. Pemetaan skala kelabu
Selain kecerunan warna, kita juga boleh menukar gambar kepada skala kelabu. Kod berikut menunjukkan cara melaksanakan pemetaan skala kelabu bagi imej:
func grayscaleMapping() { srcImg, err := imaging.Open("input.jpg") if err != nil { panic(err) } // 新建一张灰度图像 dstImg := imaging.New(srcImg.Bounds().Dx(), srcImg.Bounds().Dy(), color.NRGBA{R: 0, G: 0, B: 0, A: 0}) for y := 0; y < srcImg.Bounds().Dy(); y++ { for x := 0; x < srcImg.Bounds().Dx(); x++ { c := srcImg.At(x, y) r, g, b, _ := c.RGBA() intensity := (r + g + b) / 3 // 根据像素灰度值映射为新的颜色 c = color.RGBA{R: uint8(intensity), G: uint8(intensity), B: uint8(intensity), A: 255} dstImg.Set(x, y, c) } } err = imaging.Save(dstImg, "output_grayscale.jpg") if err != nil { panic(err) } }
Kod di atas purata nilai RGB bagi setiap piksel imej sumber, dan kemudian menggunakan hasilnya sebagai nilai RGB piksel baharu, dengan itu mencapai pemetaan skala kelabu.
Kesimpulan:
Dengan memperkenalkan perpustakaan github.com/disintegration/imaging, kami boleh melakukan pelbagai operasi pemprosesan imej dalam bahasa Go. Artikel ini mengambil kecerunan warna dan pemetaan skala kelabu sebagai contoh untuk memberikan contoh kod tertentu. Pembaca boleh melakukan operasi pemprosesan imej yang lebih kompleks atas dasar ini berdasarkan keperluan mereka.
Atas ialah kandungan terperinci Pemprosesan imej Golang: cara melaksanakan pemetaan imej kecerunan warna dan skala kelabu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!