Maison  >  Article  >  développement back-end  >  Traitement d'image Golang : découvrez comment effectuer des ajustements de couleurs et le mappage des couleurs

Traitement d'image Golang : découvrez comment effectuer des ajustements de couleurs et le mappage des couleurs

王林
王林original
2023-08-26 09:43:581153parcourir

Traitement dimage Golang : découvrez comment effectuer des ajustements de couleurs et le mappage des couleurs

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。接下来,我们可以对该图像对象进行色彩调整和颜色映射操作。

二、色彩调整

  1. 亮度调整
    亮度调整是通过改变像素的亮度值来改变图像的明暗程度。下面的代码展示了如何将图像的亮度值增加50%。
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分量进行调整,最后返回一个调整后的图像对象。

  1. 对比度调整
    对比度调整是通过扩大或压缩图像的亮度差来增强或减弱图像的对比度。下面的代码展示了如何将图像的对比度增加50%。
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
}

上述代码中,colorMaprrreee

Grâce au code ci-dessus, nous avons réussi à décoder une image nommée 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

  1. Réglage de la luminosité🎜Le réglage de la luminosité consiste à modifier la luminosité et l'obscurité de l'image en modifiant la valeur de luminosité des pixels. Le code ci-dessous montre comment augmenter la valeur de luminosité d'une image de 50 %.
rrreee🎜Dans le code ci-dessus, la fonction 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é. 🎜
  1. Réglage du contraste 🎜Le réglage du contraste consiste à améliorer ou affaiblir le contraste d'une image en agrandissant ou en compressant la différence de luminosité de l'image. Le code ci-dessous montre comment augmenter le contraste d'une image de 50 %.
rrreee🎜Dans le code ci-dessus, la fonction 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn