ホームページ  >  記事  >  バックエンド開発  >  Golang 画像処理: 画像のカラー グラデーションとグレースケール マッピングを実行する方法

Golang 画像処理: 画像のカラー グラデーションとグレースケール マッピングを実行する方法

王林
王林オリジナル
2023-08-19 08:53:091778ブラウズ

Golang 画像処理: 画像のカラー グラデーションとグレースケール マッピングを実行する方法

Golang 画像処理: 画像のカラー グラデーションとグレースケール マッピングを実行する方法

はじめに: デジタル メディアの発展に伴い、画像処理は私たちのシステムに不可欠な部分になりました。日常生活の欠落部分。 Go 言語では、github.com/disintegration/imaging などの画像処理用のライブラリを使用できます。この記事では、このライブラリを使用して画像のカラー グラデーションとグレースケール マッピングを実行する方法を紹介します。

1. ライブラリをインポートする

まず、github.com/disintegration/imaging ライブラリを Go プロジェクトに導入する必要があります。次のコマンドを使用してインストールできます:

go get -u github.com/disintegration/imaging

2. カラー グラデーション

色を作成したい場合は、画像 グラデーション効果は次の手順で実現できます:

1. 画像の読み取り

イメージング ライブラリの Open 機能を使用して、画像を読み取ることができます。次のコードは、画像の読み取り方法を示しています:

import (
    "github.com/disintegration/imaging"
)

func main() {
    srcImg, err := imaging.Open("input.jpg")
    if err != nil {
        panic(err)
    }
}

2. グラデーション画像の作成

次に、イメージング ライブラリの New 関数を使用して、新しい画像をグラデーションとして作成します。エフェクトの対象となる画像。次のコードは、ターゲット イメージを作成し、その幅と高さを指定する方法を示しています。

dstImg := imaging.New(800, 600, color.NRGBA{R: 0, G: 0, B: 0, A: 0})

この例では、色が黒 (RGB 値がすべて 0) のサイズ 800x600 のイメージを作成します。

3. グラデーション効果

イメージング ライブラリの機能を引き続き使用して、ソース画像のピクセル カラーをターゲット画像にマッピングして、グラデーション効果を実現できます。次のコードは、線形グラデーションの効果を実現する方法を示しています:

for y := 0; y < srcImg.Bounds().Dy(); y++ {
    for x := 0; x < srcImg.Bounds().Dx(); x++ {
        c := srcImg.At(x, y)
        r, g, b, a := c.RGBA()
        // 根据像素位置和颜色进行渐变计算
        c = color.RGBA{
            R: uint8(x * 255 / srcImg.Bounds().Dx()),
            G: uint8(y * 255 / srcImg.Bounds().Dy()),
            B: uint8(b / 65535 * 255),
            A: uint8(a / 65535 * 255),
        }
        dstImg.Set(x, y, c)
    }
}

4. 画像を保存します

最後に、イメージング ライブラリの Save 関数を使用して、ターゲット画像をファイルに保存できます。 file:

err = imaging.Save(dstImg, "output.jpg")
if err != nil {
    panic(err)
}

これで、写真のカラーグラデーション処理が完了しました。

3. グレースケール マッピング

カラー グラデーションに加えて、画像をグレースケールに変換することもできます。次のコードは、画像のグレースケール マッピングを実装する方法を示しています。

func grayscaleMapping() {
    srcImg, err := imaging.Open("input.jpg")
    if err != nil {
        panic(err)
    }
    
    // 新建一张灰度图像
    dstImg := imaging.New(srcImg.Bounds().Dx(), srcImg.Bounds().Dy(), color.NRGBA{R: 0, G: 0, B: 0, A: 0})
    
    for y := 0; y < srcImg.Bounds().Dy(); y++ {
        for x := 0; x < srcImg.Bounds().Dx(); x++ {
            c := srcImg.At(x, y)
            r, g, b, _ := c.RGBA()
            intensity := (r + g + b) / 3
            // 根据像素灰度值映射为新的颜色
            c = color.RGBA{R: uint8(intensity), G: uint8(intensity), B: uint8(intensity), A: 255}
            dstImg.Set(x, y, c)
        }
    }
    
    err = imaging.Save(dstImg, "output_grayscale.jpg")
    if err != nil {
        panic(err)
    }
}

上記のコードは、ソース画像の各ピクセルの RGB 値を平均し、その結果を新しいピクセルの RGB 値として使用します。グレースケール マッピング、度数マッピング。

結論:

github.com/disintegration/imaging ライブラリを導入することで、Go 言語でさまざまな画像処理操作を実行できるようになります。この記事では、カラー グラデーションとグレースケール マッピングを例として取り上げ、具体的なコード例を示します。読者は、ニーズに基づいて、これに基づいてより複雑な画像処理操作を実行できます。

以上がGolang 画像処理: 画像のカラー グラデーションとグレースケール マッピングを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。