ホームページ > バックエンド開発 > Golang > Golang 画像処理: カラー調整とカラー マッピングの方法を学ぶ

Golang 画像処理: カラー調整とカラー マッピングの方法を学ぶ

王林
リリース: 2023-08-26 09:43:58
オリジナル
1186 人が閲覧しました

Golang 画像処理: カラー調整とカラー マッピングの方法を学ぶ

Golang 画像処理: カラー調整とカラー マッピングを実行する方法を学ぶ

はじめに:
画像処理の分野では、カラー調整は非常に重要な操作です。 。画像の色を調整することで、画像の外観や雰囲気を変え、より魅力的なものにすることができます。この記事では、Golang を使用してカラー調整とカラー マッピングを行う方法とコード例を学びます。

1. Golang 画像処理の基礎
色調整を学習する前に、Golang 画像処理の基本的な知識を理解する必要があります。まず、Golang 画像処理ライブラリをインポートする必要があります。

import (
    "image"
    "image/color"
    "image/jpeg"
    "os"
)
ログイン後にコピー

その後、画像を開いて、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 にデコードすることに成功しました。次に、画像オブジェクトに対してカラー調整とカラー マッピング操作を実行できます。

2. 色の調整

  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 コンポーネントが調整され、最終的に調整された画像オブジェクトが返されます。

3. カラー マッピング
カラー マッピングとは、元の画像の 1 つまたはいくつかの色を新しい色の値にマッピングすることによって、画像の外観と色を変更することを指します。以下のコードは、画像内の赤を青にマッピングする方法を示しています。

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 関数は画像オブジェクト、古い色と新しい色を受け入れ、二重ループを使用して画像の各ピクセルを走査し、現在のピクセルの色 古い色と一致し、一致する場合はピクセルの色を新しい色に変更し、最後にカラーマップされた画像オブジェクトを返します。

結論
この記事を学習することで、Golang を使用してカラー調整とカラー マッピングを行う方法を学びました。画像の明るさ、コントラスト、マッピングカラーを調整することで、画像の外観と色を変更して、より魅力的なものにすることができます。この記事が皆さんの Golang 画像処理の学習と実践に役立つことを願っています。

以上がGolang 画像処理: カラー調整とカラー マッピングの方法を学ぶの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート