Pemprosesan Imej Golang: Ketahui cara melakukan penyongsangan warna dan pemisahan ton imej
Pengenalan:
Dengan perkembangan teknologi pemprosesan imej digital, cara melakukan pelbagai pemprosesan kesan khas pada imej telah menjadi kemahiran penting. Di Golang, kami boleh menggunakan perpustakaan pemprosesan imejnya yang berkuasa untuk mencapai pelbagai kesan pemprosesan imej. Artikel ini akan menumpukan pada cara menggunakan Golang untuk melakukan penyongsangan warna dan pemisahan ton imej.
Penyongsangan warna ialah kesan pemprosesan imej yang mudah dan biasa. Dengan penyongsangan warna, kita boleh menukar warna biasa gambar dengan sebaliknya, mencipta kesan yang berbeza sama sekali.
Contoh Kod:
package main import ( "fmt" "image" "image/color" "image/jpeg" "log" "os" ) func main() { // 读取示例图片 file, err := os.Open("example.jpg") if err != nil { log.Fatal(err) } defer file.Close() // 解码图片 img, err := jpeg.Decode(file) if err != nil { log.Fatal(err) } // 获取图片宽高 bounds := img.Bounds() width, height := bounds.Max.X, bounds.Max.Y // 创建新图片 newImg := image.NewRGBA(bounds) // 图片颜色反转 for i := 0; i < height; i++ { for j := 0; j < width; j++ { // 获取像素点颜色 oldColor := img.At(j, i) r, g, b, _ := oldColor.RGBA() // 计算反转后的颜色 newR, newG, newB := 255-r, 255-g, 255-b // 设置新像素点颜色 newColor := color.RGBA{uint8(newR), uint8(newG), uint8(newB), 0xff} newImg.Set(j, i, newColor) } } // 创建保存结果的文件 resultFile, err := os.Create("result.jpg") if err != nil { log.Fatal(err) } defer resultFile.Close() // 保存结果图片 if err := jpeg.Encode(resultFile, newImg, &jpeg.Options{100}); err != nil { log.Fatal(err) } fmt.Println("图片颜色反转完成") }
Posterisasi ialah kaedah pemprosesan kesan khas biasa yang boleh mencipta kesan visual tersendiri dengan menukar gambar berwarna-warni kepada imej yang hanya mengandungi sebilangan kecil warna utama.
Sampel kod:
package main import ( "fmt" "image" "image/color" "image/jpeg" "log" "os" ) func main() { // 读取示例图片 file, err := os.Open("example.jpg") if err != nil { log.Fatal(err) } defer file.Close() // 解码图片 img, err := jpeg.Decode(file) if err != nil { log.Fatal(err) } // 获取图片宽高 bounds := img.Bounds() width, height := bounds.Max.X, bounds.Max.Y // 创建新图片 newImg := image.NewRGBA(bounds) // 图片色调分离 for i := 0; i < height; i++ { for j := 0; j < width; j++ { // 获取像素点颜色 oldColor := img.At(j, i) r, g, b, _ := oldColor.RGBA() // 计算色调分离后的颜色 newR := (r/65535)*65535/2 + 32767 newG := (g/65535)*65535/2 + 32767 newB := (b/65535)*65535/2 + 32767 // 设置新像素点颜色 newColor := color.RGBA{uint8(newR), uint8(newG), uint8(newB), 0xff} newImg.Set(j, i, newColor) } } // 创建保存结果的文件 resultFile, err := os.Create("result.jpg") if err != nil { log.Fatal(err) } defer resultFile.Close() // 保存结果图片 if err := jpeg.Encode(resultFile, newImg, &jpeg.Options{100}); err != nil { log.Fatal(err) } fmt.Println("图片色调分离完成") }
Ringkasan:
Artikel ini memperkenalkan cara menggunakan Golang untuk melakukan penyongsangan warna dan pemisahan ton imej. Melalui contoh kod, kami belajar cara membaca dan menyahkod imej, melaksanakan operasi tahap piksel pada imej, dan akhirnya menjana imej yang terhasil. Saya berharap dengan mengkaji artikel ini, pembaca dapat mengenali pengetahuan berkaitan pemprosesan imej Golang dan menguasai keupayaan untuk melaksanakan pelbagai pemprosesan kesan khas imej.
Atas ialah kandungan terperinci Pemprosesan imej Golang: pelajari cara melakukan penyongsangan warna dan pemisahan rona imej. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!