ホームページ >バックエンド開発 >Golang >Golangを使って画像のカラーヒストグラムと二値化処理を行う方法

Golangを使って画像のカラーヒストグラムと二値化処理を行う方法

WBOY
WBOYオリジナル
2023-08-17 15:25:19966ブラウズ

Golangを使って画像のカラーヒストグラムと二値化処理を行う方法

Golang を使用して画像のカラー ヒストグラムと二値化処理を実行する方法

デジタル画像処理の普及に伴い、画像処理と分析もホットなトピックになっています。コンピュータビジョン。その中でも、カラーヒストグラムと二値化は一般的で重要な画像処理方法です。この記事では、Golangを使って画像のカラーヒストグラムや二値化処理を行う方法とコード例を紹介します。

カラー ヒストグラムは、画像内のピクセルの色の頻度の統計です。ヒストグラム分析は、画像強調、画像検索、画像分類などのアプリケーションで使用できます。 Golang を使用してカラー ヒストグラムを計算するサンプル コードを次に示します。

package main

import (
    "fmt"
    "image"
    "image/color"
    "log"
    "os"
)

func main() {
    imgFile, err := os.Open("test.jpg") // 读取图像文件
    if err != nil {
        log.Fatal(err)
    }
    defer imgFile.Close()

    img, _, err := image.Decode(imgFile) // 解码图像
    if err != nil {
        log.Fatal(err)
    }

    bounds := img.Bounds()
    histogram := make(map[color.Color]int) // 创建颜色直方图

    for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
        for x := bounds.Min.X; x < bounds.Max.X; x++ {
            c := img.At(x, y)
            histogram[c]++
        }
    }

    for c, count := range histogram {
        fmt.Printf("颜色: %v,频率: %d
", c, count)
    }
}

上記のコードは、まず画像ファイルを開いてデコードし、次にカラー ヒストグラムを作成します。各ピクセルを走査し、色の出現頻度をカウントすることにより、最終的に画像の色のヒストグラムが取得されます。ここでは、Golang 公式ライブラリ imageimage.Decode 関数を直接使用して画像をデコードしていますが、必要に応じて他の画像処理ライブラリを選択することもできます。

二値化とは、画像を 2 色のみ (通常は白と黒) の画像に変換することです。このプロセスにより、複雑な画像を簡素化し、画像内の重要な情報を抽出することもできます。 Golang を使用して画像を 2 値化するサンプル コードを次に示します。

package main

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

func main() {
    imgFile, err := os.Open("test.jpg") // 读取图像文件
    if err != nil {
        log.Fatal(err)
    }
    defer imgFile.Close()

    img, _, err := image.Decode(imgFile) // 解码图像
    if err != nil {
        log.Fatal(err)
    }

    bounds := img.Bounds()
    binaryImg := image.NewGray(bounds) // 创建一个新的灰度图像

    for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
        for x := bounds.Min.X; x < bounds.Max.X; x++ {
            c := img.At(x, y)
            gray := color.GrayModel.Convert(c).(color.Gray)
            if gray.Y >= 128 {
                binaryImg.SetGray(x, y, color.White) // 大于等于128的像素点设为白色
            } else {
                binaryImg.SetGray(x, y, color.Black) // 小于128的像素点设为黑色
            }
        }
    }

    binaryFile, err := os.Create("binary.jpg") // 创建输出文件
    if err != nil {
        log.Fatal(err)
    }
    defer binaryFile.Close()

    err = jpeg.Encode(binaryFile, binaryImg, &jpeg.Options{Quality: 100}) // 编码二值化图像
    if err != nil {
        log.Fatal(err)
    }
}

上記のコードは、まず画像ファイルを開いてデコードし、次に新しいグレースケール画像を作成します。各ピクセルを横断することにより、ピクセルのグレー値が設定されたしきい値と比較され、しきい値に基づいて黒または白が選択されます。最後に、二値化された画像がファイルに保存されます。同様に、ここでは Golang 公式ライブラリ imageimage.Decode 関数を使用して画像をデコードしていますが、必要に応じて他の画像処理ライブラリを選択することもできます。

上記の 2 つの例を通じて、Golang を使用して画像のカラー ヒストグラムと 2 値化処理を簡単に実行できます。これらの画像処理方法は、コンピューター ビジョンや画像解析の分野で広く使用されており、画像データをより深く理解し、処理するのに役立ちます。同時に、Golang は豊富な画像処理ライブラリと関数を提供しており、開発作業に大きな利便性をもたらします。

以上がGolangを使って画像のカラーヒストグラムと二値化処理を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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