Opération d'image Golang : Apprenez à seuiller et débruiter les images
Introduction
Dans les domaines du traitement d'image et de la vision par ordinateur, le seuillage et le débruitage sont des opérations de traitement d'image courantes. Cet article expliquera comment utiliser Golang pour seuiller et débruiter les images, et fournira des exemples de code correspondants.
Tout d'abord, nous devons installer le package de traitement d'image de Golang - github.com/disintegration/imaging
, installez-le via la commande suivante : github.com/disintegration/imaging
,通过以下命令进行安装:
go get -u github.com/disintegration/imaging
接下来,我们可以编写代码来实现图像的阈值化处理:
package main import ( "image" "image/color" "image/jpeg" "log" "os" "github.com/disintegration/imaging" ) 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) } // 阈值化处理 threshold := 128 bounds := img.Bounds() grayImage := image.NewGray(bounds) for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { originalColor := img.At(x, y) red, green, blue, _ := originalColor.RGBA() grayValue := (int(red) + int(green) + int(blue)) / 3 var colorValue uint8 if grayValue > threshold { colorValue = 255 } else { colorValue = 0 } grayImage.Set(x, y, color.Gray{colorValue}) } } // 保存阈值化后的图像 outputFile, err := os.Create("output.jpg") if err != nil { log.Fatal(err) } defer outputFile.Close() jpeg.Encode(outputFile, grayImage, nil) }
上述代码首先打开了名为input.jpg
的图像文件,并使用jpeg.Decode
函数对图像进行解码。然后,我们创建了一个新的灰度图像用于保存阈值化处理后的结果。接下来,我们遍历图像的每个像素,计算其灰度值,并根据阈值的设定将像素设置为黑色或白色。最后,我们使用jpeg.Encode
函数将结果保存为output.jpg
。
我们可以使用Golang的draw
包来实现简单的中值滤波算法:
package main import ( "image" "image/color" "image/jpeg" "log" "os" ) func medianFilter(img image.Image, size int) image.Image { bounds := img.Bounds() result := image.NewRGBA(bounds) for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { mr, mg, mb := 0, 0, 0 count := 0 for dy := -size; dy <= size; dy++ { for dx := -size; dx <= size; dx++ { nx := x + dx ny := y + dy if nx >= bounds.Min.X && nx < bounds.Max.X && ny >= bounds.Min.Y && ny < bounds.Max.Y { r, g, b, _ := img.At(nx, ny).RGBA() mr += int(r) mg += int(g) mb += int(b) count++ } } } rr := uint8(mr / count) gg := uint8(mg / count) bb := uint8(mb / count) result.Set(x, y, color.RGBA{rr, gg, bb, 255}) } } return result } 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) } // 中值滤波处理 filtered := medianFilter(img, 1) // 保存去噪后的图像 outputFile, err := os.Create("output.jpg") if err != nil { log.Fatal(err) } defer outputFile.Close() jpeg.Encode(outputFile, filtered, nil) }
上述代码中,我们定义了一个medianFilter
函数来实现简单的中值滤波算法。函数中,我们使用一个size
参数来指定滤波窗口的大小。我们遍历图像的每个像素,并根据窗口内的像素计算该像素的中值,并将结果保存到新创建的图像中。最后,我们使用jpeg.Encode
函数将结果保存为output.jpg
rrreee
rrreee
Le code ci-dessus ouvre d'abord un fichier image nommé input.jpg
et utilise la fonction jpeg.Decode
pour décoder l'image. Ensuite, nous créons une nouvelle image en niveaux de gris pour enregistrer le résultat seuillé. Ensuite, nous parcourons chaque pixel de l'image, calculons sa valeur en niveaux de gris et définissons le pixel sur noir ou blanc en fonction du seuil. Enfin, nous utilisons la fonction jpeg.Encode
pour enregistrer le résultat sous output.jpg
.
draw
de Golang pour implémenter un algorithme de filtrage médian simple : 🎜rrreee🎜Dans le code ci-dessus, nous définissons une fonction medianFilter
pour implémenter un simple filtre médian algorithme. Dans la fonction, nous utilisons un paramètre size
pour spécifier la taille de la fenêtre de filtre. Nous parcourons chaque pixel de l'image et calculons la valeur médiane de ce pixel en fonction des pixels dans la fenêtre et enregistrons le résultat dans l'image nouvellement créée. Enfin, nous utilisons la fonction jpeg.Encode
pour enregistrer le résultat sous output.jpg
. 🎜🎜Résumé🎜Cet article explique comment utiliser Golang pour seuiller et débruiter les images. Le seuillage peut convertir des images couleur ou en niveaux de gris en images noir et blanc pour un traitement ultérieur. Le débruitage peut réduire ou éliminer le bruit dans les images et améliorer la qualité de l'image. Grâce à des exemples de code, nous pouvons mieux comprendre et appliquer ces techniques de traitement d'image. J'espère que cet article pourra être utile pour votre étude et votre pratique dans le domaine du traitement d'images. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!