


Manipulasi imej Golang: Ketahui cara melakukan penyamaan histogram dan ambang global imej
Operasi Imej Golang: Ketahui cara melakukan penyamaan histogram dan ambang global imej
Pengenalan:
Pemprosesan imej adalah salah satu tugas penting dalam bidang penglihatan komputer dan pemprosesan imej. Dalam aplikasi praktikal, kita selalunya perlu melakukan beberapa operasi peningkatan imej untuk meningkatkan kualiti imej atau menyerlahkan ciri tertentu dalam imej. Artikel ini akan memperkenalkan cara menggunakan Golang untuk melaksanakan penyamaan histogram dan operasi ambang global pada imej untuk mencapai peningkatan imej.
1. Penyamaan histogram
Penyamaan histogram ialah kaedah peningkatan imej yang biasa digunakan Ia meningkatkan kontras imej dengan melaraskan taburan skala kelabu piksel imej. Dalam kaedah ini, kita mula-mula mengira histogram kumulatif imej, dan kemudian melaraskan nilai piksel imej berdasarkan histogram terkumpul.
Berikut ialah contoh kod Golang mudah untuk melaksanakan penyamaan histogram imej:
package main import ( "fmt" "image" "image/color" "image/jpeg" "os" ) func main() { // 打开图片文件 file, err := os.Open("input.jpg") if err != nil { fmt.Println(err) return } defer file.Close() // 解码图片 img, _, err := image.Decode(file) if err != nil { fmt.Println(err) return } // 计算直方图 hist := histogram(img) // 计算累积直方图 cumHist := cumulativeHistogram(hist) // 根据累积直方图对图像进行像素值调整 newImg := adjustPixels(img, cumHist) // 保存处理后的图像 outFile, err := os.Create("output.jpg") if err != nil { fmt.Println(err) return } defer outFile.Close() // 编码图像 err = jpeg.Encode(outFile, newImg, &jpeg.Options{Quality: 100}) if err != nil { fmt.Println(err) return } fmt.Println("图像处理完成!") } // 计算直方图 func histogram(img image.Image) []int { bounds := img.Bounds() w, h := bounds.Max.X, bounds.Max.Y hist := make([]int, 256) for y := 0; y < h; y++ { for x := 0; x < w; x++ { r, _, _, _ := img.At(x, y).RGBA() gray := color.Gray{uint8(r / 256)} hist[gray.Y]++ } } return hist } // 计算累积直方图 func cumulativeHistogram(hist []int) []int { cumHist := make([]int, len(hist)) cumHist[0] = hist[0] for i := 1; i < len(hist); i++ { cumHist[i] = cumHist[i-1] + hist[i] } return cumHist } // 根据累积直方图调整像素值 func adjustPixels(img image.Image, cumHist []int) image.Image { bounds := img.Bounds() w, h := bounds.Max.X, bounds.Max.Y newImg := image.NewRGBA(bounds) for y := 0; y < h; y++ { for x := 0; x < w; x++ { r, g, b, a := img.At(x, y).RGBA() gray := color.Gray{uint8(r / 256)} val := uint8(float64(cumHist[gray.Y]) / float64(w*h) * 255) newImg.Set(x, y, color.RGBA{val, val, val, uint8(a / 256)}) } } return newImg }
Dalam kod di atas, kami mula-mula lulus Decode
pakej image
Fungsi menyahkod fail imej input kepada objek jenis image.Image
. Kemudian, kami memanggil fungsi histogram
untuk mengira histogram imej dan fungsi kumulatifHistogram
untuk mengira histogram kumulatif imej. Akhir sekali, kami melaraskan nilai piksel imej berdasarkan histogram terkumpul dan menyimpan imej yang diproses ke fail menggunakan fungsi Encode
pakej jpeg
. image
包的Decode
函数将输入图像文件解码为image.Image
类型的对象。然后,我们分别调用histogram
函数计算图像的直方图,cumulativeHistogram
函数计算图像的累积直方图。最后,我们根据累积直方图调整图像的像素值,并使用jpeg
包的Encode
函数将处理后的图像保存到文件中。
二、全局阈值化
全局阈值化是一种简单但有效的图像二值化方法,它将图像的像素值分为两个互不重叠的光滑区域,分别代表目标物体和背景。这种方法通常应用于具有明显的前景和背景差异的图像。
下面是一个简单的Golang代码示例,用于实现图像的全局阈值化:
package main import ( "fmt" "image" "image/color" "image/jpeg" "os" ) func main() { // 打开图片文件 file, err := os.Open("input.jpg") if err != nil { fmt.Println(err) return } defer file.Close() // 解码图片 img, _, err := image.Decode(file) if err != nil { fmt.Println(err) return } // 根据全局阈值对图像进行二值化处理 newImg := binarize(img) // 保存处理后的图像 outFile, err := os.Create("output.jpg") if err != nil { fmt.Println(err) return } defer outFile.Close() // 编码图像 err = jpeg.Encode(outFile, newImg, &jpeg.Options{Quality: 100}) if err != nil { fmt.Println(err) return } fmt.Println("图像处理完成!") } // 根据全局阈值对图像进行二值化处理 func binarize(img image.Image) image.Image { bounds := img.Bounds() w, h := bounds.Max.X, bounds.Max.Y newImg := image.NewRGBA(bounds) threshold := calculateThreshold(img) for y := 0; y < h; y++ { for x := 0; x < w; x++ { r, g, b, a := img.At(x, y).RGBA() gray := color.Gray{uint8(r / 256)} var val uint8 if gray.Y > threshold { val = 255 } else { val = 0 } newImg.Set(x, y, color.RGBA{val, val, val, uint8(a / 256)}) } } return newImg } // 根据图像的直方图计算全局阈值 func calculateThreshold(img image.Image) uint8 { hist := histogram(img) totalPixels := img.Bounds().Max.X * img.Bounds().Max.Y // 计算背景像素值的总和 var bgSum, bgCount, fgSum, fgCount int for i := 0; i < len(hist); i++ { if i <= 128 { bgSum += i * hist[i] bgCount += hist[i] } else { fgSum += i * hist[i] fgCount += hist[i] } } // 计算背景和前景的平均灰度值 bgMean := bgSum / bgCount fgMean := fgSum / fgCount // 根据背景和前景的平均灰度值计算阈值 return uint8((bgMean + fgMean) / 2) } // 计算直方图 func histogram(img image.Image) []int { bounds := img.Bounds() w, h := bounds.Max.X, bounds.Max.Y hist := make([]int, 256) for y := 0; y < h; y++ { for x := 0; x < w; x++ { r, _, _, _ := img.At(x, y).RGBA() gray := color.Gray{uint8(r / 256)} hist[gray.Y]++ } } return hist }
在上述代码中,我们首先通过image
包的Decode
函数将输入图像文件解码为image.Image
类型的对象。然后,我们调用calculateThreshold
函数计算图像的全局阈值。最后,我们根据全局阈值将图像进行二值化处理,并使用jpeg
包的Encode
Ambang global ialah kaedah perduaan imej yang mudah tetapi berkesan Ia membahagikan nilai piksel imej kepada dua kawasan licin tidak bertindih, masing-masing mewakili objek sasaran dan latar belakang. Kaedah ini biasanya digunakan pada imej dengan perbezaan latar depan dan latar belakang yang jelas.
Decode
pakej image
Decode the masukkan fail imej ke dalam objek jenis image.Image
. Kemudian, kami memanggil fungsi calculateThreshold
untuk mengira ambang global imej. Akhir sekali, kami menduakan imej mengikut ambang global dan menyimpan imej yang diproses ke fail menggunakan fungsi Encode
bagi pakej jpeg
. 🎜🎜Ringkasan: 🎜Dalam artikel ini kami memperkenalkan cara menggunakan Golang untuk melaksanakan penyamaan histogram dan operasi ambang global pada imej. Penyamaan histogram boleh digunakan untuk meningkatkan kontras imej, menjadikan imej lebih jelas dan lebih jelas ambang global boleh digunakan untuk menukar imej kepada imej binari untuk menyerlahkan objek sasaran dalam imej. Dengan menggunakan kedua-dua kaedah ini secara fleksibel, kami boleh mencapai peningkatan imej dan pengekstrakan ciri untuk memenuhi pelbagai keperluan aplikasi. Dalam aplikasi praktikal, kami boleh menggabungkan dengan algoritma pemprosesan imej lain untuk meningkatkan lagi kesan dan kualiti pemprosesan imej. 🎜Atas ialah kandungan terperinci Manipulasi imej Golang: Ketahui cara melakukan penyamaan histogram dan ambang global imej. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Manipulasi imej Golang: Bagaimana untuk mencerminkan, memutar dan membalikkan imej 1. Pengenalan Pemprosesan imej adalah salah satu keperluan yang sering kita hadapi dalam banyak senario pembangunan. Di Golang, kita boleh menggunakan pakej imej untuk mengendalikan dan memproses imej. Artikel ini akan menumpukan pada cara menggunakan Golang untuk mencerminkan, memutar dan membalikkan imej serta memberikan contoh kod yang sepadan. 2. Operasi cerminan Mencerminkan gambar adalah untuk menukar susun atur kiri dan kanan gambar. Di Golang, anda boleh menggunakan Fli pakej cabutan

Mengapa Golang sesuai untuk pembangunan AI? Dengan perkembangan pesat teknologi kecerdasan buatan (AI), semakin ramai pembangun dan penyelidik mula memberi perhatian kepada potensi penggunaan bahasa pengaturcaraan Golang dalam bidang AI. Golang (juga dikenali sebagai Go) ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google Ia digemari oleh pembangun kerana prestasi tinggi, konkurensi tinggi dan kesederhanaan serta kemudahan penggunaan. Artikel ini akan meneroka sebab Golang sesuai untuk pembangunan AI dan menyediakan beberapa kod sampel untuk menunjukkan kelebihan Golang dalam medan AI. Seks tinggi

Pembangunan Golang: Membina Sistem Penyimpanan Fail Teragih Dalam beberapa tahun kebelakangan ini, dengan perkembangan pesat pengkomputeran awan dan data besar, permintaan untuk storan data terus meningkat. Untuk menghadapi trend ini, sistem penyimpanan fail yang diedarkan telah menjadi arah teknikal yang penting. Artikel ini akan memperkenalkan cara membina sistem storan fail teragih menggunakan bahasa pengaturcaraan Golang dan memberikan contoh kod khusus. 1. Reka bentuk sistem storan fail teragih Sistem storan fail teragih ialah sistem yang menyimpan data fail secara teragih pada berbilang mesin Ia membahagikan data kepada berbilang blok.

Operasi Imej PHP: Cara Mendapatkan Saiz dan Saiz Fail Imej Dalam membangunkan laman web atau aplikasi, kita selalunya perlu memproses imej. Mendapatkan saiz dan saiz fail imej adalah keperluan biasa, yang boleh dicapai dengan mudah melalui beberapa fungsi dalam PHP. Artikel ini akan memperkenalkan cara menggunakan PHP untuk mendapatkan saiz dan saiz fail imej, dan melampirkan contoh kod. Dapatkan saiz imej Untuk mendapatkan saiz imej, anda boleh menggunakan fungsi terbina dalam PHP getimagesize(). Fungsi ini akan mengembalikan fail yang mengandungi saiz imej

Butiran, teknik dan amalan terbaik untuk melaksanakan pengumpulan dan analisis log yang diedarkan dengan Golang dan RabbitMQ Dalam beberapa tahun kebelakangan ini, dengan populariti seni bina perkhidmatan mikro dan kerumitan sistem berskala besar, pengumpulan dan analisis log telah menjadi semakin penting. Dalam sistem yang diedarkan, log setiap perkhidmatan mikro sering bertaburan di tempat yang berbeza Cara mengumpul dan menganalisis log ini dengan cekap menjadi satu cabaran. Artikel ini akan memperkenalkan butiran, teknik dan amalan terbaik tentang cara menggunakan Golang dan RabbitMQ untuk melaksanakan pengumpulan dan analisis log teragih. Ra

Operasi imej Golang: Cara melakukan keseimbangan warna dan penukaran warna pada imej Pengenalan: Dalam bidang pemprosesan imej, keseimbangan warna dan penukaran warna adalah salah satu operasi yang biasa digunakan. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk melaksanakan keseimbangan warna dan penukaran warna gambar serta memberikan contoh kod yang sepadan. 1. Keseimbangan warna Keseimbangan warna merujuk kepada melaraskan keamatan setiap saluran warna dalam imej untuk menjadikan keseluruhan warna imej lebih seragam dan semula jadi. Algoritma imbangan warna yang biasa digunakan termasuk imbangan kecerahan, imbangan putih dan penyamaan histogram. Imbangan kecerahan Keseimbangan kecerahan dicapai dengan melaraskan graf

Manipulasi imej Golang: Cara melakukan pemetaan kecerunan dan tekstur pada imej Gambaran Keseluruhan: Dalam pemprosesan imej, pemetaan kecerunan dan tekstur adalah dua teknik yang biasa digunakan. Kecerunan boleh mencipta peralihan kesan warna yang lancar, manakala pemetaan tekstur boleh memetakan imej tekstur kepada imej sasaran. Artikel ini akan memperkenalkan cara menggunakan bahasa pengaturcaraan Golang untuk melaksanakan operasi pemetaan kecerunan dan tekstur pada imej. Kecerunan imej Pertama, kita perlu mengimport imej dan imej/warna pakej pemprosesan imej Golang. Berikut ialah kod sampel, dicipta oleh

Pengenalan kepada analisis senario aplikasi Goroutines dalam amalan pengaturcaraan serentak Golang: Dengan peningkatan berterusan prestasi komputer, pemproses berbilang teras telah menjadi arus perdana Untuk menggunakan sepenuhnya kelebihan pemproses berbilang teras, kita perlu menggunakan serentak teknologi pengaturcaraan untuk melaksanakan operasi berbilang benang. Dalam bahasa Go, Goroutines (coroutines) ialah mekanisme pengaturcaraan serentak yang sangat berkuasa yang boleh digunakan untuk mencapai operasi serentak yang cekap Dalam artikel ini, kami akan meneroka senario aplikasi Goroutines dan memberikan beberapa contoh.
