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

Cara menggunakan Golang untuk meningkatkan sempadan dan tepi imej

Aug 18, 2023 pm 09:46 PM
golang Pemprosesan imej Peningkatan sempadan

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 Laman Web ini
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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1543
276
Strategi untuk mengintegrasikan perkhidmatan golang dengan infrastruktur python sedia ada Strategi untuk mengintegrasikan perkhidmatan golang dengan infrastruktur python sedia ada Jul 02, 2025 pm 04:39 PM

TointegrategoLanggerviceswithexistingpythoninfrastructure, userestapisorgrpcforinter-serviceCommunication, membolehkangoandpythonappstointeractseamlythroughtroughtroughtroughtroughtroughtrotocols.1.usereSestaS (ViaframeworksLikeGineGinpyton)

Memahami Perbezaan Prestasi antara Golang dan Python untuk API Web Memahami Perbezaan Prestasi antara Golang dan Python untuk API Web Jul 03, 2025 am 02:40 AM

GolangoffersSuperiorperformance, NativeConCurrencyViagoroutine, andefficientResourceusage, makeitidealforhigh-traffic, rendah latencyapis;

Perbandingan Jejak Memori: Menjalankan beban kerja perkhidmatan web yang sama di Golang dan Python Perbandingan Jejak Memori: Menjalankan beban kerja perkhidmatan web yang sama di Golang dan Python Jul 03, 2025 am 02:32 AM

Gousessessmificlylantlylessmemorythanpythhenrunningwebservicesduetolanguagedesignandconcurrencymodeldifferences.1.go'sgoroutinesarelightweightwithminimalstackoverhead, membenarkanficienthandlingofthoushoushousle

Keadaan Perpustakaan Pembelajaran Mesin: Tawaran Golang vs Ekosistem Python yang luas Keadaan Perpustakaan Pembelajaran Mesin: Tawaran Golang vs Ekosistem Python yang luas Jul 03, 2025 am 02:00 AM

Pythonisthedominantlanguageagefinhinelearningduetoitsmatureecosystem, wheengoofferslightweighttoolssuitedforspecificusecases.pythonexcelswithlibrariesliketensorflow, pytorch, scikitshipships, danpandalshoorshoorshoade.pherdoShardsoStoShoStoStoSoShoStoSoShoStoShoStoShoStoSoShoSt

Memahami Perbezaan Pengurusan Memori: Golang's GC vs Python's Rujukan Mengira Memahami Perbezaan Pengurusan Memori: Golang's GC vs Python's Rujukan Mengira Jul 03, 2025 am 02:31 AM

Perbezaan teras antara GO dan Python dalam pengurusan memori adalah mekanisme pengumpulan sampah yang berbeza. GO menggunakan pelepasan tanda serentak (Markandsweep) GC, yang secara automatik menjalankan dan melaksanakan secara serentak dengan logik program, dengan berkesan menangani rujukan bulat. Ia sesuai untuk senario konvensional yang tinggi, tetapi tidak dapat mengawal masa kitar semula dengan tepat; manakala Python terutamanya bergantung kepada pengiraan rujukan, dan rujukan objek segera dikeluarkan apabila sifar. Kelebihannya ialah mereka adalah kitar semula segera dan pelaksanaan yang mudah, tetapi terdapat masalah rujukan pekeliling, jadi mereka perlu menggunakan modul GC untuk membantu pembersihan. Dalam pembangunan sebenar, GO lebih sesuai untuk program pelayan berprestasi tinggi, manakala Python sesuai untuk kelas skrip atau aplikasi dengan keperluan prestasi yang rendah.

Bangunan Alat baris arahan: Kelebihan Golang Over Python untuk Pengedaran Bangunan Alat baris arahan: Kelebihan Golang Over Python untuk Pengedaran Jul 02, 2025 pm 04:24 PM

Apabila membina alat baris arahan untuk diedarkan, Golang lebih sesuai daripada Python. Sebab -sebabnya termasuk: 1. Pengedaran mudah, dan satu fail binari statik tunggal dihasilkan selepas penyusun GO, tanpa ketergantungan tambahan; 2. Kelajuan permulaan yang cepat, penggunaan sumber yang rendah, GO adalah bahasa yang disusun, kecekapan pelaksanaan yang tinggi dan penggunaan memori kecil; 3. Menyokong kompilasi silang platform, tiada alat pembungkusan tambahan diperlukan, dan fail yang boleh dilaksanakan dari platform yang berbeza boleh dihasilkan dengan arahan mudah. Sebaliknya, Python memerlukan pemasangan perpustakaan runtime dan pergantungan, yang lambat bermula, proses pembungkusan yang kompleks, dan terdedah kepada keserasian dan positif palsu, jadi ia tidak sebaik dari segi pengalaman penggunaan dan kos penyelenggaraan.

Penunjuk golang untuk penjelasan antara muka Penunjuk golang untuk penjelasan antara muka Jul 21, 2025 am 03:14 AM

Antara muka bukan jenis penunjuk, ia mengandungi dua penunjuk: jenis dan nilai dinamik. 1. Pemboleh ubah antara muka menyimpan jenis deskriptor dan penunjuk data jenis tertentu; 2. Apabila menyerahkan penunjuk ke antara muka, ia menyimpan salinan penunjuk, dan antara muka itu sendiri bukan jenis penunjuk; 3. Sama ada antara muka yang tidak memerlukan jenis dan nilai yang akan dinilai pada masa yang sama; 4. Apabila penerima kaedah adalah penunjuk, hanya jenis penunjuk dapat merealisasikan antara muka; 5. Dalam pembangunan sebenar, perhatikan perbezaan antara salinan nilai dan pemindahan penunjuk antara muka. Memahami ini boleh mengelakkan kesilapan runtime dan meningkatkan keselamatan kod.

Membandingkan Perpustakaan Standard: Perbezaan utama antara Golang dan Python Membandingkan Perpustakaan Standard: Perbezaan utama antara Golang dan Python Jul 03, 2025 am 02:29 AM

Perpustakaan piawai Golang dan Python berbeza dengan ketara dalam falsafah reka bentuk, prestasi dan sokongan konvensional, pengalaman pemaju, dan keupayaan pembangunan web. 1. Dari segi falsafah reka bentuk, pergi menekankan kesederhanaan dan konsistensi, menyediakan pakej yang kecil tetapi cekap; Walaupun Python mengikuti konsep "membawa bateri sendiri" dan menyediakan modul yang kaya untuk meningkatkan fleksibiliti. 2. Dari segi prestasi dan kesesuaian, pergi secara asli menyokong coroutine dan saluran, yang sesuai untuk senario konvensional yang tinggi; Python dibatasi oleh Gil, dan multithreading tidak dapat mencapai paralelisme yang benar dan perlu bergantung pada modul multi-proses yang lebih berat. 3. Dari segi pengalaman pemaju, Go Toolchain memaksa pemformatan kod dan import standard untuk meningkatkan konsistensi kerjasama pasukan; Python memberikan lebih banyak kebebasan tetapi dengan mudah boleh membawa kepada kekeliruan gaya. 4. Pembangunan Web

See all articles