So verwenden Sie Golang, um die Helligkeit auszugleichen und Bilder zu entfärben
1. Hintergrund
Mit der Entwicklung der Bildverarbeitungstechnologie ist es zu einer allgemeinen Anforderung geworden, die Helligkeit auszugleichen und Bilder zu entfärben. Unter Helligkeitsausgleich versteht man die Anpassung der Helligkeit eines Bildes auf einen geeigneten Bereich, um den visuellen Effekt des Bildes zu verbessern. Der Entfärbungsprozess entfernt die Farbinformationen des Bildes und behält nur die Graustufeninformationen bei, die für einige spezielle Anwendungsszenarien verwendet werden.
In diesem Artikel erfahren Sie, wie Sie mit der Programmiersprache Golang einen Helligkeitsausgleich und eine Entfärbung von Bildern erreichen.
2. Helligkeitsausgleich
Das Ziel des Helligkeitsausgleichs besteht darin, den Helligkeitsbereich des Bildes von den dunkleren oder helleren Extremen auf einen geeigneten Bereich anzupassen. Ein üblicher Helligkeitsausgleichsalgorithmus ist der Histogrammausgleich.
Das Folgende ist ein Beispielcode, der zeigt, wie Golang zum Implementieren des Histogrammausgleichsalgorithmus verwendet wird:
package main import ( "image" "image/color" "image/jpeg" "log" "os" ) func main() { // 打开图片文件 file, err := os.Open("input.jpg") if err != nil { log.Fatal(err) } defer file.Close() // 解码图片 img, err := jpeg.Decode(file) if err != nil { log.Fatal(err) } // 创建一个新的灰度图像 bounds := img.Bounds() gray := image.NewGray(bounds) // 计算每个灰度级的像素个数 count := make([]int, 256) for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { grayColor := color.GrayModel.Convert(img.At(x, y)).(color.Gray) count[grayColor.Y]++ } } // 计算累积分布函数 cdf := make([]int, 256) cdf[0] = count[0] for i := 1; i < 256; i++ { cdf[i] = cdf[i-1] + count[i] } // 将累积分布函数映射到[0, 255]的范围 for i := 0; i < 256; i++ { cdf[i] = cdf[i] * 255 / (bounds.Dx() * bounds.Dy()) } // 对每个像素进行亮度均衡化处理 for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { grayColor := color.GrayModel.Convert(img.At(x, y)).(color.Gray) grayColor.Y = uint8(cdf[grayColor.Y]) gray.Set(x, y, grayColor) } } // 保存处理后的图像 outputFile, err := os.Create("output.jpg") if err != nil { log.Fatal(err) } defer outputFile.Close() err = jpeg.Encode(outputFile, gray, nil) if err != nil { log.Fatal(err) } }
Im obigen Code öffnen wir zuerst eine Bilddatei und dekodieren sie dann in ein Bildobjekt. Als nächstes erstellen wir ein neues Graustufenbildobjekt und zählen die Anzahl der Pixel für jede Graustufenstufe im Originalbild. Als nächstes haben wir die kumulative Verteilungsfunktion berechnet und sie dem Bereich [0, 255] zugeordnet. Schließlich führen wir für jedes Pixel einen Helligkeitsausgleich durch und speichern das verarbeitete Bild.
3. Entfärbung
Entfärbung entfernt die Farbinformationen des Bildes und behält nur die Graustufeninformationen bei. Das Folgende ist ein Beispielcode, der zeigt, wie Golang zum Implementieren der Entfärbung verwendet wird:
package main import ( "image" "image/color" "image/jpeg" "log" "os" ) func main() { // 打开图片文件 file, err := os.Open("input.jpg") if err != nil { log.Fatal(err) } defer file.Close() // 解码图片 img, err := jpeg.Decode(file) if err != nil { log.Fatal(err) } // 创建一个新的灰度图像 bounds := img.Bounds() gray := image.NewGray(bounds) // 对每个像素进行去色处理 for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { grayColor := color.GrayModel.Convert(img.At(x, y)).(color.Gray) grayColor.Y = uint8(grayColor.Y) gray.Set(x, y, grayColor) } } // 保存处理后的图像 outputFile, err := os.Create("output.jpg") if err != nil { log.Fatal(err) } defer outputFile.Close() err = jpeg.Encode(outputFile, gray, nil) if err != nil { log.Fatal(err) } }
Im obigen Code verwenden wir dieselbe Methode, um eine Bilddatei zu öffnen und zu dekodieren und ein neues Graustufenbildobjekt zu erstellen. Anschließend entfärben wir jedes Pixel, das heißt, wir setzen die Farbinformationen des Pixels auf die Graustufeninformationen des Pixels. Abschließend speichern wir das verarbeitete Bild.
4. Zusammenfassung
In diesem Artikel wird erläutert, wie Sie mit Golang einen Helligkeitsausgleich und eine Entfärbung von Bildern erreichen. Durch den Histogrammausgleichsalgorithmus und den Entfärbungsverarbeitungsalgorithmus können wir die Helligkeit des Bildes effektiv anpassen und die Farbinformationen des Bildes entfernen. Durch die Verwendung von Golang zur Implementierung von Bildverarbeitungsfunktionen können große Mengen an Bilddaten schnell und effizient verarbeitet werden, um den Anforderungen verschiedener praktischer Anwendungsszenarien gerecht zu werden. Ich hoffe, dass dieser Artikel den Lesern helfen kann, Bildverarbeitungsalgorithmen zu verstehen und anzuwenden.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Golang, um die Helligkeit auszugleichen und Bilder zu entfärben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!