Traitement d'image Golang : Apprenez à effectuer le réglage des couleurs et le mappage des couleurs
Introduction :
Dans le domaine du traitement d'image, le réglage des couleurs est une opération très importante. En ajustant les couleurs d’une image, nous pouvons modifier l’apparence et l’ambiance de l’image, la rendant plus attrayante. Dans cet article, nous apprendrons comment utiliser Golang pour l'ajustement des couleurs et le mappage des couleurs, ainsi que des exemples de code.
1. Bases du traitement d'image Golang
Avant de commencer à apprendre le réglage des couleurs, nous devons comprendre quelques connaissances de base du traitement d'image Golang. Tout d’abord, nous devons importer la bibliothèque de traitement d’images Golang.
import ( "image" "image/color" "image/jpeg" "os" )
Nous pouvons ensuite ouvrir une image et la décoder en un objet image Golang en utilisant la fonction Decode
. Decode
函数将其解码为Golang图像对象。
file, err := os.Open("input.jpg") if err != nil { panic(err) } defer file.Close() img, err := jpeg.Decode(file) if err != nil { panic(err) }
通过上述代码,我们成功地将一张名为input.jpg
的图片解码为了Golang图像对象img
。接下来,我们可以对该图像对象进行色彩调整和颜色映射操作。
二、色彩调整
func adjustBrightness(img image.Image, value float64) image.Image { bounds := img.Bounds() width, height := bounds.Max.X, bounds.Max.Y newImg := image.NewRGBA(bounds) for x := 0; x < width; x++ { for y := 0; y < height; y++ { r, g, b, a := img.At(x, y).RGBA() gray := (r + g + b) / 3 newR := clamp(uint32(float64(r) + value*float64(gray))) newG := clamp(uint32(float64(g) + value*float64(gray))) newB := clamp(uint32(float64(b) + value*float64(gray))) newImg.Set(x, y, color.RGBA{R: uint8(newR), G: uint8(newG), B: uint8(newB), A: uint8(a)}) } } return newImg } func clamp(value uint32) uint8 { if value > 255 { return 255 } if value < 0 { return 0 } return uint8(value) }
上述代码中,adjustBrightness
函数接受一个图像对象和一个亮度值,然后使用双重循环遍历图像的每个像素,并对每个像素的R、G、B分量进行调整,最后返回一个调整后的图像对象。
func adjustContrast(img image.Image, value float64) image.Image { bounds := img.Bounds() width, height := bounds.Max.X, bounds.Max.Y newImg := image.NewRGBA(bounds) for x := 0; x < width; x++ { for y := 0; y < height; y++ { r, g, b, a := img.At(x, y).RGBA() newR := clamp(uint32((float64(r) - 0.5*65535) * value + 0.5*65535)) newG := clamp(uint32((float64(g) - 0.5*65535) * value + 0.5*65535)) newB := clamp(uint32((float64(b) - 0.5*65535) * value + 0.5*65535)) newImg.Set(x, y, color.RGBA{R: uint8(newR), G: uint8(newG), B: uint8(newB), A: uint8(a)}) } } return newImg }
上述代码中,adjustContrast
函数接受一个图像对象和一个对比度值,然后使用双重循环遍历图像的每个像素,并对每个像素的R、G、B分量进行调整,最后返回一个调整后的图像对象。
三、颜色映射
颜色映射是指通过将原图像中的某个或某些颜色映射为新的颜色值来改变图像的外观和色彩。下面的代码展示了如何将图像中的红色映射为蓝色。
func colorMap(img image.Image, oldColor, newColor color.RGBA) image.Image { bounds := img.Bounds() width, height := bounds.Max.X, bounds.Max.Y newImg := image.NewRGBA(bounds) for x := 0; x < width; x++ { for y := 0; y < height; y++ { r, g, b, a := img.At(x, y).RGBA() if r == uint32(oldColor.R)*65535 && g == uint32(oldColor.G)*65535 && b == uint32(oldColor.B)*65535 { newImg.Set(x, y, newColor) } else { newImg.Set(x, y, color.RGBA{R: uint8(r / 256), G: uint8(g / 256), B: uint8(b / 256), A: uint8(a / 256)}) } } } return newImg }
上述代码中,colorMap
rrreee
input.jpg
en un objet image Golang img
. Ensuite, nous pouvons effectuer des opérations d’ajustement des couleurs et de mappage des couleurs sur l’objet image.
2. Réglage des couleurs
adjustBrightness
accepte un objet image et une valeur de luminosité, puis utilise une double boucle pour parcourir chaque pixel de l'image et effectuer R sur chaque pixel, les composants G et B sont ajustés et enfin un objet image ajusté est renvoyé. 🎜adjustContrast
accepte un objet image et une valeur de contraste, puis utilise une double boucle pour parcourir chaque pixel de l'image et calculer les composants R de chaque pixel, G et B sont ajustés, et enfin un objet image ajusté est renvoyé. 🎜🎜3. Cartographie des couleurs🎜Le mappage des couleurs fait référence à la modification de l'apparence et de la couleur d'une image en mappant une ou plusieurs couleurs de l'image d'origine avec de nouvelles valeurs de couleur. Le code ci-dessous montre comment mapper le rouge d’une image au bleu. 🎜rrreee🎜Dans le code ci-dessus, la fonction colorMap
accepte un objet image, une ancienne couleur et une nouvelle couleur, puis utilise une double boucle pour parcourir chaque pixel de l'image et déterminer si la couleur de le pixel actuel est le même que l'ancienne correspondance de couleur, s'il y a une correspondance, modifiez la couleur du pixel avec la nouvelle couleur et renvoyez enfin un objet image mappé en couleurs. 🎜🎜Conclusion🎜En étudiant cet article, nous avons appris à utiliser Golang pour l'ajustement des couleurs et le mappage des couleurs. En ajustant la luminosité, le contraste et les couleurs de mappage de l'image, nous pouvons modifier l'apparence et la couleur de l'image pour la rendre plus attrayante. J'espère que cet article pourra être utile à l'apprentissage et à la pratique de chacun dans le traitement d'images Golang. 🎜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!