Go は効率的なプログラミング言語として、画像処理の分野でも優れたパフォーマンスを発揮します。 Go 独自の標準ライブラリは特殊な画像処理関連の API を提供していませんが、GoCV、ImageMagick、GraphicsMagick など、使用できる優れたサードパーティ ライブラリがいくつかあります。この記事では、画像処理に GoCV を使用することに焦点を当てます。
GoCV は、OpenCV に大きく依存する Go 言語バインディング ライブラリです。その API 設計は、Python の opencv-python および C の OpenCV に非常に似ているため、学習と開始が簡単です。画像の処理に使用されます。ビデオ、カメラ、その他のタスク。以下に、一般的に使用されるいくつかの画像処理タスクの実装を紹介します。
画像処理の前に、画像を読み込み、処理された画像を保存する必要があります。 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 形式です。
画像のスケーリングは、画像処理において非常に一般的なタスクです。画像を縮小すると画像サイズを縮小し、計算を高速化することができ、画像を拡大すると画像の詳細を強調することができます。 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 を使用して処理された画像を指定された場所に保存します。
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
を使用して、処理された画像を指定した場所に保存します。
、MedianBlur
、Bi LateralFilter
など、使用できる多くのフィルター関数も提供します。以下はガウス フィルタリングの使用例です。 <pre class='brush:go;toolbar:false;'>package main
import (
"gocv.io/x/gocv"
)
func main() {
img := gocv.IMRead("test.jpg", gocv.IMReadGrayScale)
dst := gocv.NewMat()
gocv.GaussianBlur(img, &dst, image.Point{X: 5, Y: 5}, 0, 0, gocv.BorderDefault)
gocv.IMWrite("out.jpg", dst)
}</pre>
この例では、
関数を使用してグレースケール イメージをロードし、次に NewMat
関数を使用します。元の画像と同じ寸法の Mat オブジェクトを作成します。ここではガウス フィルター関数 GaussianBlur
が使用されており、2 番目のパラメーターは出力結果の Mat オブジェクトです。 3 番目のパラメーター image.Point{X: 5, Y:5}
は、フィルター処理時に使用されるテンプレート サイズを表します。ここでは、長さ 5 ピクセル、幅 5 ピクセルの長方形です。最後に、IMWrite
を使用して、処理された画像を指定した場所に保存します。
関数を提供します。以下は、Canny 関数の使用例です。 <pre class='brush:go;toolbar:false;'>package main
import (
"gocv.io/x/gocv"
)
func main() {
img := gocv.IMRead("test.jpg", gocv.IMReadGrayScale)
dst := gocv.NewMat()
gocv.Canny(img, &dst, 100, 200)
gocv.IMWrite("out.jpg", dst)
}</pre>
この例では、
関数を使用してグレースケール イメージをロードし、次に NewMat
関数を使用します。元の画像と同じ寸法の Mat オブジェクトを作成する関数。ここでは Canny エッジ検出関数 Canny
が使用されており、2 番目のパラメーターは出力結果の Mat オブジェクトです。 3 番目と 4 番目のパラメータ 100、200
はそれぞれ最小しきい値と最大しきい値を表しており、実際の問題に応じて調整できます。最後に、IMWrite
を使用して、処理された画像を指定した場所に保存します。 上記は、いくつかの一般的な画像処理タスクが Go 言語でどのように実装されるかを示しています。 GoCV は優れた画像処理機能を数多く備えており、Python や C 分野の他のライブラリとよく統合されており、導入障壁が低いため、初心者が学習して使用するのに非常に適しています。
以上がGoで画像処理をするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。