ホームページ >バックエンド開発 >Golang >Golang を使用して画像の境界線やエッジを強調する方法

Golang を使用して画像の境界線やエッジを強調する方法

WBOY
WBOYオリジナル
2023-08-18 21:46:45872ブラウズ

Golang を使用して画像の境界線やエッジを強調する方法

Golang を使用して画像の境界線とエッジを強調する方法

概要:
画像処理の分野では、境界線とエッジの強調は一般的に使用されるテクノロジです。画像の視覚効果を効果的に改善し、画像認識の精度を向上させることができます。この記事では、Golang 言語を使用して画像の境界線とエッジの強調操作を実行する方法を紹介し、対応するコード例を示します。

注: この記事は、ローカル環境に Golang 開発環境をインストールして構成していることを前提としています。

  1. 依存関係パッケージのインポート
    まず、画像処理操作のために次の依存関係パッケージをインポートする必要があります:
import (
    "image"
    "image/color"
    "image/draw"
)
  1. 画像の読み込み
    接続次へ、処理する画像ファイルをロードする必要があります。ここでは例として JPEG 形式の写真を取得し、image/jpeg パッケージを通じてその写真ファイルを読み込みます。
file, err := os.Open("input.jpg")
if err != nil {
    log.Fatal(err)
}
defer file.Close()

img, _, err := image.Decode(file)
if err != nil {
    log.Fatal(err)
}
  1. 境界線を追加
    今すぐ、画像に枠線を追加できます 枠線が追加されました。境界線のサイズと色、画像の端からの境界線の距離をカスタマイズできます。
borderWidth := 10
borderColor := color.RGBA{255, 0, 0, 255} // 红色边框
borderRect := image.Rect(0, 0, img.Bounds().Dx()+borderWidth*2, img.Bounds().Dy()+borderWidth*2)

borderImg := image.NewRGBA(borderRect)
draw.Draw(borderImg, borderImg.Bounds(), &image.Uniform{borderColor}, image.ZP, draw.Src)
draw.Draw(borderImg, img.Bounds().Add(image.Point{borderWidth, borderWidth}), img, image.ZP, draw.Src)

outputFile, err := os.Create("output_with_border.jpg")
if err != nil {
    log.Fatal(err)
}
defer outputFile.Close()

jpeg.Encode(outputFile, borderImg, &jpeg.Options{Quality: 100})

このコードでは、最初に元の画像のサイズと指定された境界線のサイズに基づいて新しい画像オブジェクトを作成します。次に、draw.Draw 関数を使用して、新しい画像に境界線の色を描画し、境界線内に元の画像を描画します。

最後に、jpeg.Encode 関数を使用して、枠線を追加した画像をファイルに保存します。

  1. エッジ強調
    境界線を追加するだけでなく、画像のエッジを強調して画像内のオブジェクトの輪郭を強調することもできます。
radius := 1.0 // 边缘增强半径
threshold := 50.0 // 边缘增强阈值

enhancedImg := image.NewRGBA(img.Bounds())
for y := img.Bounds().Min.Y; y < img.Bounds().Max.Y; y++ {
    for x := img.Bounds().Min.X; x < img.Bounds().Max.X; x++ {
        r, g, b, _ := img.At(x, y).RGBA()
        neighbors := [9]color.Color{
            img.At(x-1, y+1), img.At(x, y+1), img.At(x+1, y+1),
            img.At(x-1, y), img.At(x, y), img.At(x+1, y),
            img.At(x-1, y-1), img.At(x, y-1), img.At(x+1, y-1),
        }
        var totalDiff float64
        for _, neighbor := range neighbors {
            nr, ng, nb, _ := neighbor.RGBA()
            totalDiff += diff(r, nr) + diff(g, ng) + diff(b, nb)
        }
        if totalDiff/9 > threshold {
            enhancedImg.Set(x, y, color.Black)
        } else {
            enhancedImg.Set(x, y, color.White)
        }
    }
}

outputFile, err = os.Create("output_with_enhanced_edges.jpg")
if err != nil {
    log.Fatal(err)
}
defer outputFile.Close()

jpeg.Encode(outputFile, enhancedImg, &jpeg.Options{Quality: 100})

このコードでは、画像の各ピクセルを反復処理し、周囲のピクセル値を取得します。次に、各ピクセルと周囲のピクセルとの差分が計算され、これらの差分値が累積されます。累積された値が指定されたしきい値より大きい場合は、このピクセルが画像の端に位置していることを意味し、黒に設定され、それ以外の場合は白に設定されます。最後に、強化されたエッジをファイルに保存します。

概要:
上記のサンプル コードを通じて、Golang を使用して画像の境界線とエッジの強調操作を実行する方法を学びました。これらのテクノロジーは、画像処理、コンピューター ビジョン、機械学習などの分野に適用して、画像の品質と精度を向上させることができます。この記事がお役に立てば幸いです!

以上がGolang を使用して画像の境界線やエッジを強調する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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