Golang を使用して画像の境界線とエッジを強調する方法
概要:
画像処理の分野では、境界線とエッジの強調は一般的に使用されるテクノロジです。画像の視覚効果を効果的に改善し、画像認識の精度を向上させることができます。この記事では、Golang 言語を使用して画像の境界線とエッジの強調操作を実行する方法を紹介し、対応するコード例を示します。
注: この記事は、ローカル環境に Golang 開発環境をインストールして構成していることを前提としています。
import ( "image" "image/color" "image/draw" )
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) }
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
関数を使用して、枠線を追加した画像をファイルに保存します。
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 サイトの他の関連記事を参照してください。