Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan Golang untuk meningkatkan sempadan dan tepi imej

Cara menggunakan Golang untuk meningkatkan sempadan dan tepi imej

WBOY
WBOYasal
2023-08-18 21:46:45841semak imbas

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.

  1. Import pakej pergantungan
    Pertama, kita perlu mengimport pakej pergantungan berikut untuk operasi pemprosesan imej:
import (
    "image"
    "image/color"
    "image/draw"
)
  1. Memuatkan imej
    Seterusnya, kita perlu memuatkan fail imej untuk diproses. Di sini kami mengambil gambar dalam format JPEG sebagai contoh, dan memuatkan fail gambar melalui pakej 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)
}
  1. 增加边框
    现在,我们可以对图像添加边框了。我们可以自定义边框的大小和颜色,以及边框距离图像的边界的距离。
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})
      Tambah sempadan
    1. Sekarang, kami boleh menambah sempadan pada imej. Kita boleh menyesuaikan saiz dan warna sempadan, serta jarak sempadan dari tepi imej.
    2. rrreee
    Dalam kod ini, kami mula-mula mencipta objek imej baharu berdasarkan saiz imej asal dan saiz sempadan yang ditentukan. Kemudian gunakan fungsi 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.


    Peningkatan Tepi🎜Selain menambah sempadan, kita juga boleh mempertingkatkan tepi imej untuk menyerlahkan garis besar objek dalam imej. 🎜🎜rrreee🎜Dalam kod ini, kami mengulangi setiap piksel imej dan mendapatkan nilai piksel di sekelilingnya. Kemudian perbezaan antara setiap piksel dan piksel sekeliling dikira dan nilai perbezaan ini terkumpul. Jika nilai terkumpul lebih besar daripada ambang yang ditentukan, ini bermakna piksel ini terletak di tepi imej, dan kami menetapkannya kepada hitam jika tidak, ia ditetapkan kepada putih. Akhir sekali, simpan bahagian tepi yang dipertingkatkan pada fail. 🎜🎜Ringkasan: 🎜Melalui kod sampel di atas, kami mempelajari cara menggunakan Golang untuk melaksanakan operasi peningkatan jidar dan tepi pada imej. Teknologi ini boleh digunakan pada bidang seperti pemprosesan imej, penglihatan komputer dan pembelajaran mesin untuk meningkatkan kualiti dan ketepatan imej. Harap artikel ini membantu anda! 🎜

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn