ホームページ バックエンド開発 Golang Golang 画像操作: 画像のカラーバランスと色変換を実行する方法

Golang 画像操作: 画像のカラーバランスと色変換を実行する方法

Aug 19, 2023 am 09:21 AM
画像の加工 golang (プログラミング言語) カラーバランス

Golang 画像操作: 画像のカラーバランスと色変換を実行する方法

Golang の画像操作: 写真のカラー バランスと色変換を実行する方法

はじめに: 画像処理の分野では、カラー バランスと色変換は重要な処理の 1 つです。よく使用される操作。この記事では、Go 言語を使用して画像のカラー バランスと色変換を実行する方法と、対応するコード例を紹介します。

1. カラー バランス
カラー バランスとは、画像全体の色をより均一で自然にするために、画像内の各カラー チャネルの強度を調整することを指します。一般的に使用されるカラー バランス アルゴリズムには、輝度バランス、ホワイト バランス、ヒストグラム イコライゼーションが含まれます。

  1. 明るさのバランス
    明るさのバランスは、画像の明るさの分布を調整することによって実現されます。以下は、明るさのバランスを実現するための簡単なサンプル コードです:
package main

import (
    "image"
    "image/color"
    "image/png"
    "os"
)

func brightnessBalance(img image.Image) image.Image {
    width := img.Bounds().Dx()
    height := img.Bounds().Dy()

    balanceImg := image.NewRGBA(img.Bounds())

    for y := 0; y < height; y++ {
        for x := 0; x < width; x++ {
            r, g, b, a := img.At(x, y).RGBA()
            r = r * 2
            g = g * 2
            b = b * 2

            balanceImg.Set(x, y, color.RGBA{uint8(r), uint8(g), uint8(b), uint8(a)})
        }
    }

    return balanceImg
}

func main() {
    file, err := os.Open("input.png")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    img, _, err := image.Decode(file)
    if err != nil {
        panic(err)
    }

    balanceImg := brightnessBalance(img)

    outputFile, err := os.Create("output.png")
    if err != nil {
        panic(err)
    }
    defer outputFile.Close()

    err = png.Encode(outputFile, balanceImg)
    if err != nil {
        panic(err)
    }
}
ログイン後にコピー

上記のコードでは、画像の各ピクセルをループし、各ピクセルの赤、緑、青のチャネルを結合します。全体の明るさを高めるために 2 を掛けます。元の画像を読み込み、処理した画像を保存することで、カラーバランスの取れた画像を得ることができます。

  1. ホワイト バランス
    ホワイト バランスは、写真の不均一な照明によって引き起こされる色かぶりを除去することです。以下は、ホワイト バランスを実現するための簡単なサンプル コードです。
package main

import (
    "image"
    "image/color"
    "image/png"
    "math"
    "os"
)

func whiteBalance(img image.Image) image.Image {
    width := img.Bounds().Dx()
    height := img.Bounds().Dy()

    whiteBalanceImg := image.NewRGBA(img.Bounds())

    var sumR, sumG, sumB float64
    for y := 0; y < height; y++ {
        for x := 0; x < width; x++ {
            r, g, b, a := img.At(x, y).RGBA()
            sumR += math.Log(float64(r))
            sumG += math.Log(float64(g))
            sumB += math.Log(float64(b))
        }
    }
    avgR := math.Exp(sumR / (float64(width * height)))
    avgG := math.Exp(sumG / (float64(width * height)))
    avgB := math.Exp(sumB / (float64(width * height)))

    for y := 0; y < height; y++ {
        for x := 0; x < width; x++ {
            r, g, b, a := img.At(x, y).RGBA()
            r = uint32(math.Log(float64(r)) * avgR / float64(r))
            g = uint32(math.Log(float64(g)) * avgG / float64(g))
            b = uint32(math.Log(float64(b)) * avgB / float64(b))

            whiteBalanceImg.Set(x, y, color.RGBA{uint8(r), uint8(g), uint8(b), uint8(a)})
        }
    }

    return whiteBalanceImg
}

func main() {
    file, err := os.Open("input.png")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    img, _, err := image.Decode(file)
    if err != nil {
        panic(err)
    }

    whiteBalanceImg := whiteBalance(img)

    outputFile, err := os.Create("output.png")
    if err != nil {
        panic(err)
    }
    defer outputFile.Close()

    err = png.Encode(outputFile, whiteBalanceImg)
    if err != nil {
        panic(err)
    }
}
ログイン後にコピー

上記のコードでは、画像内のすべてのピクセルの対数値の平均を計算し、各ピクセルの対数値を除算します。ピクセル ホワイト バランスは、平均値を乗算し、指数演算を実行することによって実現されます。同様に、元の画像を読み込み、処理した画像を保存することで、ホワイトバランスの取れた画像を取得できます。

2. カラー変換
カラー変換とは、ある色空間の色を別の色空間の色に変換することを指します。一般的に使用される色変換には、RGB から HSV および RGB から YUV が含まれます。

  1. RGB から HSV への変換
    RGB と HSV は 2 つの一般的な色空間です。RGB は赤、緑、青の 3 つの色成分を表すために使用され、HSV は色相を表すために使用されます。色の、彩度、明度の3つの属性。

以下は、RGB カラーを HSV カラーに変換する簡単なサンプル コードです:

package main

import (
    "fmt"
    "image/color"
)

func rgbToHsv(r, g, b uint8) (uint16, uint8, uint8) {
    var h, s, v uint16

    max := uint16(r)
    if uint16(g) > max {
        max = uint16(g)
    }
    if uint16(b) > max {
        max = uint16(b)
    }

    min := uint16(r)
    if uint16(g) < min {
        min = uint16(g)
    }
    if uint16(b) < min {
        min = uint16(b)
    }

    v = max
    delta := max - min

    if max != 0 {
        s = uint8(delta) * 255 / uint8(max)
    } else {
        s = 0
    }

    if delta != 0 {
        if max == uint16(r) {
            h = (uint16(g) - uint16(b)) * 60 / delta
            if uint16(g) < uint16(b) {
                h += 360
            }
        } else if max == uint16(g) {
            h = (2 + (uint16(b)-uint16(r))/delta) * 60
        } else {
            h = (4 + (uint16(r)-uint16(g))/delta) * 60
        }
    } else {
        h = 0
    }

    return h, s, uint8(v)
}

func main() {
    r := uint8(255)
    g := uint8(0)
    b := uint8(0)

    h, s, v := rgbToHsv(r, g, b)

    fmt.Printf("RGB(%d, %d, %d) -> HSV(%d, %d, %d)
", r, g, b, h, s, v)
}
ログイン後にコピー

上記のコードでは、一連の Calculate を渡し、対応する HSV の値を計算します。色の成分。 RGB コンポーネントの値を赤の最大値に設定することで純粋な赤の RGB カラーを出力し、対応する HSV カラーを計算します。

  1. RGB から YUV への変換
    YUV も一般的な色空間で、Y は明るさを表し、U と V は彩度を表します。以下は、RGB カラーを YUV カラーに変換するための簡単なコード例です。
package main

import (
    "fmt"
    "image/color"
)

func rgbToYuv(r, g, b uint8) (uint8, uint8, uint8) {
    y := uint8(float32(r)*0.299 + float32(g)*0.587 + float32(b)*0.114)
    u := uint8((-float32(r)*0.14713 - float32(g)*0.28886 + float32(b)*0.436 + 128) / 2)
    v := uint8((float32(r)*0.615 + float32(g)*0.51499 - float32(b)*0.10001 + 128) / 2)
    return y, u, v
}

func main() {
    r := uint8(255)
    g := uint8(0)
    b := uint8(0)

    y, u, v := rgbToYuv(r, g, b)

    fmt.Printf("RGB(%d, %d, %d) -> YUV(%d, %d, %d)
", r, g, b, y, u, v)
}
ログイン後にコピー

上記のコードでは、 RGB カラーコンポーネント: YUV カラーコンポーネントの値。同様に、RGB コンポーネントの値を赤の最大値に設定して純粋な赤の RGB カラーを出力し、対応する YUV カラーを計算します。

結論: この記事では、Go 言語を使用した画像のカラー バランスと色変換の方法を紹介し、対応するコード例を示します。この記事を通じて、読者の皆様が Golang の画像操作について理解を深め、実際のプロジェクトに適用できるようになることを願っています。

以上がGolang 画像操作: 画像のカラーバランスと色変換を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python を使用して写真のカラーバランス調整を行う方法 Python を使用して写真のカラーバランス調整を行う方法 Aug 17, 2023 am 11:43 AM

Python を使用して写真のカラー バランスを調整する方法 はじめに: 画像処理では、カラー バランスは一般的な操作です。画像のカラーバランスを調整することで、画像全体の色合いをよりニーズに合わせたものに変更できます。この記事では、Python 言語を使用して画像のカラー バランスを調整する方法を紹介し、読者がそれをすぐに実装できるようにコード例を示します。 1. カラー バランスの原理 カラー バランスとは、画像内のさまざまなカラー チャネルの強度を調整して、全体的なカラー効果を実現する操作です。一般的に画像の色は赤で決まります。

Golang の画像操作: 画像をミラーリング、回転、反転する方法 Golang の画像操作: 画像をミラーリング、回転、反転する方法 Aug 25, 2023 pm 10:31 PM

Golang の画像操作: 画像をミラーリング、回転、反転する方法 1. はじめに 画像処理は、多くの開発シナリオで頻繁に遭遇するニーズの 1 つです。 Golang では、画像パッケージを使用して画像を操作および処理できます。この記事では、Golang を使用して画像をミラーリング、回転、反転する方法に焦点を当て、対応するコード例を示します。 2. ミラーリング操作 画像のミラーリングとは、画像の左右の配置を変更することです。 GolangではdrawパッケージのFliが使えます

PHP画像操作:画像のサイズとファイルサイズを取得する方法 PHP画像操作:画像のサイズとファイルサイズを取得する方法 Aug 26, 2023 am 08:55 AM

PHP 画像の操作: 画像のサイズとファイル サイズを取得する方法 Web サイトやアプリケーションの開発では、画像を処理する必要があることがよくあります。画像のサイズとファイル サイズを取得することは一般的な要件であり、PHP のいくつかの関数を使用して簡単に実現できます。この記事では、PHPを使って画像のサイズやファイルサイズを取得する方法をコード例を添えて紹介します。画像サイズの取得 画像サイズを取得するには、PHP の組み込み関数 getimagesize() を使用できます。この関数は画像サイズを含むファイルを返します。

Golang 画像操作: 画像のカラーバランスと色変換を実行する方法 Golang 画像操作: 画像のカラーバランスと色変換を実行する方法 Aug 19, 2023 am 09:21 AM

Golang の画像操作: 画像のカラー バランスと色変換を実行する方法 はじめに: 画像処理の分野では、カラー バランスと色変換は一般的に使用される操作の 1 つです。この記事では、Go 言語を使用して画像のカラー バランスと色変換を実行する方法と、対応するコード例を紹介します。 1. カラー バランス カラー バランスとは、画像全体の色をより均一で自然にするために、画像内の各カラー チャネルの強度を調整することを指します。一般的に使用されるカラー バランス アルゴリズムには、輝度バランス、ホワイト バランス、ヒストグラム イコライゼーションが含まれます。明るさバランスグラフを調整することで明るさバランスを実現します

Golang 画像操作: 画像のグラデーションとテクスチャ マッピングを実行する方法 Golang 画像操作: 画像のグラデーションとテクスチャ マッピングを実行する方法 Aug 22, 2023 pm 12:33 PM

Golang 画像操作: 画像上でグラデーション マッピングとテクスチャ マッピングを実行する方法 概要: 画像処理では、グラデーション マッピングとテクスチャ マッピングの 2 つが一般的に使用される手法です。グラデーションはカラー効果の滑らかな遷移を作成でき、テクスチャ マッピングはテクスチャ イメージをターゲット イメージにマッピングできます。この記事では、Golang プログラミング言語を使用して画像に対してグラデーションおよびテクスチャ マッピング操作を実行する方法を紹介します。画像のグラデーション まず、Golang の画像処理パッケージ image と image/color をインポートする必要があります。以下は、によって作成されたサンプルコードです。

Golang は Baidu AI インターフェイスに接続して画像分析機能を実装し、簡単に始めることができます Golang は Baidu AI インターフェイスに接続して画像分析機能を実装し、簡単に始めることができます Aug 26, 2023 pm 03:03 PM

Golang を Baidu AI インターフェイスに接続して画像分析機能を実現し、簡単に始めることができます 要約: この記事では、Golang を使用して Baidu AI インターフェイスに接続して画像分析機能を実現する方法を紹介します。 Baidu AI オープン プラットフォームが提供する画像認識インターフェイスを使用し、Golang 言語でコードを記述することで画像のラベル認識とテキスト認識機能を実装します。準備作業を開始する前に、次のツールと資料を準備する必要があります: Baidu AI インターフェイスにアクセスするための APIKey と Se を取得するための Baidu 開発者アカウント

Golang の画像操作: 明るさとコントラストを調整する方法 Golang の画像操作: 明るさとコントラストを調整する方法 Aug 19, 2023 pm 04:53 PM

Golang 画像操作: 明るさとコントラストを調整する方法 はじめに: 画像処理において、画像の明るさとコントラストを調整することは非常に一般的なタスクです。明るさを調整することで、画像を明るくしたり暗くしたりできます。また、コントラストを調整することで、画像内の色の違いを増減できます。この記事では、Golang を使用して画像の明るさとコントラストを調整する方法とコード例を紹介します。必要なパッケージをインポートする まず、画像の読み取りと保存を処理するために、画像とカラーのパッケージをインポートする必要があります。

Golang の画像操作: 切断や画像の欠落を検出して修復する方法 Golang の画像操作: 切断や画像の欠落を検出して修復する方法 Aug 26, 2023 pm 09:21 PM

Golang のイメージ操作: 壊れたイメージや欠落したイメージを検出して修復する方法 はじめに: 日常の開発において、イメージの操作は一般的なタスクです。画像を処理する過程で、画像の切断や画像の欠落などの問題が発生することがよくあります。これらの問題を迅速かつ正確に検出して修正する方法は、私たちが議論する必要があるトピックです。記事の内容: この記事では、Golang を使用して、壊れた線や欠落した画像を検出して修復する方法を説明します。理解を深めるために、2回に分けて説明します。パート 1: 検出チャート

See all articles