Rumah > Artikel > pembangunan bahagian belakang > Cara menggunakan Golang untuk meningkatkan sempadan dan tepi imej
Cara menggunakan Golang untuk meningkatkan sempadan dan tepi imej
Ikhtisar:
Dalam bidang pemprosesan imej, peningkatan sempadan dan tepi adalah teknologi yang biasa digunakan yang boleh meningkatkan kesan visual imej secara berkesan dan meningkatkan ketepatan pengecaman imej. Artikel ini akan memperkenalkan cara menggunakan bahasa Golang untuk melaksanakan operasi peningkatan jidar dan tepi pada imej dan memberikan contoh kod yang sepadan.
Nota: Artikel ini menganggap bahawa anda telah memasang dan mengkonfigurasi persekitaran pembangunan Golang dalam persekitaran setempat anda.
import ( "image" "image/color" "image/draw" )
imej/jpeg
: image/jpeg
包来加载图片文件:file, err := os.Open("input.jpg") if err != nil { log.Fatal(err) } defer file.Close() img, _, err := image.Decode(file) if err != nil { log.Fatal(err) }
borderWidth := 10 borderColor := color.RGBA{255, 0, 0, 255} // 红色边框 borderRect := image.Rect(0, 0, img.Bounds().Dx()+borderWidth*2, img.Bounds().Dy()+borderWidth*2) borderImg := image.NewRGBA(borderRect) draw.Draw(borderImg, borderImg.Bounds(), &image.Uniform{borderColor}, image.ZP, draw.Src) draw.Draw(borderImg, img.Bounds().Add(image.Point{borderWidth, borderWidth}), img, image.ZP, draw.Src) outputFile, err := os.Create("output_with_border.jpg") if err != nil { log.Fatal(err) } defer outputFile.Close() jpeg.Encode(outputFile, borderImg, &jpeg.Options{Quality: 100})
这段代码中,我们首先根据原始图像的尺寸和指定的边框大小创建一个新的图像对象。然后使用draw.Draw
函数将边框的颜色绘制到新图像中,并将原始图像绘制在边框内。
最后,我们使用jpeg.Encode
radius := 1.0 // 边缘增强半径 threshold := 50.0 // 边缘增强阈值 enhancedImg := image.NewRGBA(img.Bounds()) for y := img.Bounds().Min.Y; y < img.Bounds().Max.Y; y++ { for x := img.Bounds().Min.X; x < img.Bounds().Max.X; x++ { r, g, b, _ := img.At(x, y).RGBA() neighbors := [9]color.Color{ img.At(x-1, y+1), img.At(x, y+1), img.At(x+1, y+1), img.At(x-1, y), img.At(x, y), img.At(x+1, y), img.At(x-1, y-1), img.At(x, y-1), img.At(x+1, y-1), } var totalDiff float64 for _, neighbor := range neighbors { nr, ng, nb, _ := neighbor.RGBA() totalDiff += diff(r, nr) + diff(g, ng) + diff(b, nb) } if totalDiff/9 > threshold { enhancedImg.Set(x, y, color.Black) } else { enhancedImg.Set(x, y, color.White) } } } outputFile, err = os.Create("output_with_enhanced_edges.jpg") if err != nil { log.Fatal(err) } defer outputFile.Close() jpeg.Encode(outputFile, enhancedImg, &jpeg.Options{Quality: 100})
draw.Draw
untuk melukis warna sempadan ke dalam imej baharu dan melukis imej asal dalam sempadan. Akhir sekali, kami menggunakan fungsi jpeg.Encode
untuk menyimpan imej dengan sempadan tambahan pada fail. Atas ialah kandungan terperinci Cara menggunakan Golang untuk meningkatkan sempadan dan tepi imej. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!