ホームページ >バックエンド開発 >Golang >Goで画像処理をするにはどうすればよいですか?

Goで画像処理をするにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-05-11 16:45:121389ブラウズ

Go は効率的なプログラミング言語として、画像処理の分野でも優れたパフォーマンスを発揮します。 Go 独自の標準ライブラリは特殊な画像処理関連の API を提供していませんが、GoCV、ImageMagick、GraphicsMagick など、使用できる優れたサードパーティ ライブラリがいくつかあります。この記事では、画像処理に GoCV を使用することに焦点を当てます。

GoCV は、OpenCV に大きく依存する Go 言語バインディング ライブラリです。その API 設計は、Python の opencv-python および C の OpenCV に非常に似ているため、学習と開始が簡単です。画像の処理に使用されます。ビデオ、カメラ、その他のタスク。以下に、一般的に使用されるいくつかの画像処理タスクの実装を紹介します。

  1. 画像の読み込みと保存

画像処理の前に、画像を読み込み、処理された画像を保存する必要があります。 GoCV は、このプロセスの実現に役立つ多くの機能を提供します。以下は、画像の読み込みと保存の例です。

package main

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

func main() {
    img := gocv.IMRead("test.jpg", gocv.IMReadColor)

    if img.Empty() {
        fmt.Println("读取图像失败")
        return
    }

    gocv.IMWrite("out.jpg", img)
}

この例では、IMRead 関数を使用して JPG 形式で画像を読み取り、2 番目のパラメータで読み取った画像を指定します。変換方法は必須です。gocv.IMReadColor は、読み取ったイメージをカラー イメージに変換する必要があることを示します。次に、読み取りが成功したかどうかを判断しますが、読み取られた画像が空の場合は、読み取りは失敗します。最後に、IMWrite 関数を使用して、指定した場所に画像を保存します。ここで保存される画像も JPG 形式です。

  1. 画像のスケーリング

画像のスケーリングは、画像処理において非常に一般的なタスクです。画像を縮小すると画像サイズを縮小し、計算を高速化することができ、画像を拡大すると画像の詳細を強調することができます。 GoCV は、画像のスケーリング操作を実装する Resize 関数を提供します。次は、画像をスケーリングする簡単な例です:

package main

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

func main() {
    img := gocv.IMRead("test.jpg", gocv.IMReadColor)
    dst := gocv.NewMat()

    gocv.Resize(img, &dst, image.Point{}, 0.5, 0.5, gocv.InterpolationDefault)

    gocv.IMWrite("out.jpg", dst)
}

この例では、最初に IMRead## を使用します。関数はイメージを読み取り、NewMat 関数を使用して元のイメージと同じサイズの Mat オブジェクトを作成します。 Resize 関数を使用して元の画像を半分に縮小し、最後に IMWrite を使用して処理された画像を指定された場所に保存します。

    画像のトリミング
画像のトリミングは、画像のローカル処理を実行するために使用でき、関心のある領域の抽出、無駄な情報のトリミングなどにおいて非常に重要な役割を果たすことができます。ターゲットオブジェクトを抽出する重要な役割。 GoCV には、画像トリミング操作を実装する

ROI 関数が用意されています。次は、簡単な画像トリミングの例です:

package main

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

func main() {
    img := gocv.IMRead("test.jpg", gocv.IMReadColor)
    dst := img.Region(gocv.NewRect(50, 50, 200, 200))

    gocv.IMWrite("out.jpg", dst)
}

この例では、最初に

IMRead## を使用します # 関数は次のように読み取ります画像を取得し、Region 関数を使用して画像から対象領域を抽出します。ここで gocv.NewRect(50, 50, 200, 200) は、切り取られた対象領域が長さ 200 ピクセル、幅 200 ピクセル、左上隅の座標の長方形であることを意味しますは (50, 50) です。最後に、IMWrite を使用して、処理された画像を指定した場所に保存します。

画像フィルタリング
  1. 画像フィルタリングは、画像のノイズを除去したり、画像を滑らかにしたり、その他の操作を行うために使用できます。 GoCV は、
GaussianBlur

MedianBlurBi LateralFilter など、使用できる多くのフィルター関数も提供します。以下はガウス フィルタリングの使用例です。 <pre class='brush:go;toolbar:false;'>package main import ( &quot;gocv.io/x/gocv&quot; ) func main() { img := gocv.IMRead(&quot;test.jpg&quot;, gocv.IMReadGrayScale) dst := gocv.NewMat() gocv.GaussianBlur(img, &amp;dst, image.Point{X: 5, Y: 5}, 0, 0, gocv.BorderDefault) gocv.IMWrite(&quot;out.jpg&quot;, dst) }</pre> この例では、

IMRead

関数を使用してグレースケール イメージをロードし、次に NewMat 関数を使用します。元の画像と同じ寸法の Mat オブジェクトを作成します。ここではガウス フィルター関数 GaussianBlur が使用されており、2 番目のパラメーターは出力結果の Mat オブジェクトです。 3 番目のパラメーター image.Point{X: 5, Y:5} は、フィルター処理時に使用されるテンプレート サイズを表します。ここでは、長さ 5 ピクセル、幅 5 ピクセルの長方形です。最後に、IMWrite を使用して、処理された画像を指定した場所に保存します。

画像セグメンテーション
  1. 画像セグメンテーションは重要な画像処理タスクであり、ターゲット オブジェクトの分離や特定の特徴を生成するためのデータの前処理などのタスクに使用できます。 GoCV は、単純な画像セグメンテーションを実装するために使用できる、エッジ検出用の
Canny

関数を提供します。以下は、Canny 関数の使用例です。 <pre class='brush:go;toolbar:false;'>package main import ( &quot;gocv.io/x/gocv&quot; ) func main() { img := gocv.IMRead(&quot;test.jpg&quot;, gocv.IMReadGrayScale) dst := gocv.NewMat() gocv.Canny(img, &amp;dst, 100, 200) gocv.IMWrite(&quot;out.jpg&quot;, dst) }</pre> この例では、

IMRead

関数を使用してグレースケール イメージをロードし、次に NewMat 関数を使用します。元の画像と同じ寸法の Mat オブジェクトを作成する関数。ここでは Canny エッジ検出関数 Canny が使用されており、2 番目のパラメーターは出力結果の Mat オブジェクトです。 3 番目と 4 番目のパラメータ 100、200 はそれぞれ最小しきい値と最大しきい値を表しており、実際の問題に応じて調整できます。最後に、IMWrite を使用して、処理された画像を指定した場所に保存します。 上記は、いくつかの一般的な画像処理タスクが Go 言語でどのように実装されるかを示しています。 GoCV は優れた画像処理機能を数多く備えており、Python や C 分野の他のライブラリとよく統合されており、導入障壁が低いため、初心者が学習して使用するのに非常に適しています。

以上がGoで画像処理をするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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