ホームページ  >  記事  >  バックエンド開発  >  Golang 画像処理: 画像のエッジ抽出と形状検出を実行する方法を学習します。

Golang 画像処理: 画像のエッジ抽出と形状検出を実行する方法を学習します。

WBOY
WBOYオリジナル
2023-08-18 13:12:30816ブラウズ

Golang 画像処理: 画像のエッジ抽出と形状検出を実行する方法を学習します。

Golang 画像処理: 画像のエッジ抽出と形状検出を実行する方法を学習します

はじめに:
画像処理、エッジ抽出と形状検出の分野重要な技術の一つです。画像のエッジを抽出することで物体の輪郭情報を取得し、形状の検出や認識に利用できます。この記事では、Golang を使用して画像のエッジ抽出と形状検出を行う方法を紹介し、読者の参考として関連するコード例を示します。

1. Golang 環境のインストールと構成
始める前に、Go コードをスムーズに実行してコンパイルできるように、Golang 開発環境をインストールして構成する必要があります。読者は Golang 公式 Web サイト (https://golang.org) にアクセスし、公式ガイダンスに従ってインストールおよび設定を行うことができます。

2. 画像処理ライブラリのインポート
Go 言語には、GoCV や Pigo などの優れた画像処理ライブラリがいくつか用意されています。この記事では、画像エッジ抽出と形状検出操作に GoCV ライブラリを使用します。読者は、コマンド go get -u -d gocv.io/x/gocv を使用して GoCV ライブラリをダウンロードしてインストールできます。

3. 画像エッジ抽出
画像エッジ抽出とは、画像から物体のエッジ情報を抽出することを指します。ここでは、GoCV ライブラリに実装されている Canny アルゴリズムをエッジ検出に使用します。簡単なサンプル コードを次に示します。

package main

import (
    "fmt"
    "gocv.io/x/gocv"
)

func main() {
    img := gocv.IMRead("input.jpg", gocv.IMReadColor)
    defer img.Close()

    gray := gocv.NewMat()
    defer gray.Close()

    gocv.CvtColor(img, &gray, gocv.ColorBGRToGray)

    edges := gocv.NewMat()
    defer edges.Close()

    gocv.Canny(gray, &edges, 75, 200)

    window := gocv.NewWindow("Canny")
    defer window.Close()

    window.SetWindowTitle("Canny")
    window.IMShow(edges)
    window.WaitKey(0)
}

上記のコードでは、まず IMRead 関数を使用してファイルから画像を読み取り、それからグレースケール画像に変換します。次に、Canny アルゴリズムを使用してエッジ検出を行い、結果を新しいウィンドウに表示します。

4. 形状検出
形状検出とは、円、長方形などの特定の形状を画像から検出することを指します。 GoCV ライブラリでは、FindContours 関数を使用して形状検出を実装できます。以下は簡単なサンプル コードです。

package main

import (
    "fmt"
    "gocv.io/x/gocv"
)

func main() {
    img := gocv.IMRead("input.jpg", gocv.IMReadGrayScale)
    defer img.Close()

    blur := gocv.NewMat()
    defer blur.Close()

    gocv.GaussianBlur(img, &blur, image.Pt(7, 7), 0, 0, gocv.BorderDefault)

    thresh := gocv.NewMat()
    defer thresh.Close()

    gocv.Threshold(blur, &thresh, 127, 255, gocv.ThresholdBinary)

    contours := gocv.FindContours(thresh, gocv.RetrievalExternal, gocv.ChainApproxSimple)

    for _, contour := range contours {
        area := gocv.ContourArea(contour)
        fmt.Println("Contour area:", area)
    }
}

上記のコードでは、まず IMRead 関数を使用してファイルからグレースケール イメージを読み取り、次にそのイメージに対してガウスぼかしを実行します。次に、二値化技術(Threshold)を使用して画像を二値画像に変換します。最後に、FindContours 関数を使用して画像内の輪郭を見つけ、各輪郭の面積を計算します。

結論:
この記事の概要とサンプル コードを通じて、読者は Golang を使用して画像エッジ抽出と形状検出操作を行う方法を学ぶことができます。これらのテクノロジを習得することで、読者はオブジェクト認識、画像セグメンテーションなどの画像処理分野のさまざまなシナリオに適用できるようになります。この記事が読者のお役に立てば幸いです。

以上がGolang 画像処理: 画像のエッジ抽出と形状検出を実行する方法を学習します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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