Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

OpenCV & Goを用いた画像重畳

前回はpythonOpenCVにて画像や動画の重畳方法をまとめました。
elsammit-beginnerblg.hatenablog.com

今回は報告の通り、Go言語での画像重畳方法についてまとめたいと思います!!



■Go言語での画像読み取り

画像の読み取りに限った話ではないですが、基本的な関数はPythonとほぼ同じです!!
Go言語での画像読み取りはこちらです。

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

func main() {
	imgA := gocv.IMRead("./lenalena.jpg", -1)
}

IMReadですが、

func IMRead(name string, flags IMReadFlag) Mat

で定義されております。
IMReadFlagですが、こちらの通り定義されております。
f:id:Elsammit:20201108191251p:plain

■Go言語での画像書き込み

画像書き込み処理はこちらの通りです。
ちょっと書き込むだけでは、、、だったので。
グレーイメージに変換してから画像ファイルとして書き込むようにしました。

package main

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

func main() {
	imgA := gocv.IMRead("画像ファイル", -1)
	img_gray := gocv.NewMat()
	gocv.CvtColor(imgA, &img_gray, 6)
	gocv.IMWrite("./grayImg.jpg", img_gray)
}

画像書き込みは、

func IMWrite(name string, img Mat) bool

で可能になります。
第1引数に書き込みファイル名、第2引数が書き込みたい画像イメージとなります。

グレー画像変換は、

func CvtColor(src Mat, dst *Mat, code ColorConversionCode)

を用いて、ColorConversionCodeをグレーイメージに変換するように指定すればOKです。
ColorConversionCodeの設定リストはこちらで確認可能です。
https://godoc.org/gocv.io/x/gocv#ColorConversionCode

■画像重畳

では、本題の画像重畳です!!
画像の重畳ですが、

func AddWeighted(src1 Mat, alpha float64, src2 Mat, beta float64, gamma float64, dst *Mat)

を用います。
pythonとほとんど同じですね。
異なっているのは、重畳後の画像も引数として渡す必要があるところのみです。

実際に画像重畳させるためのコード例はこちらになります。

package main

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

func main() {
	imgA := gocv.IMRead("画像ファイル1", -1)
	imgB := gocv.IMRead("画像ファイル2", -1)
	img_gray := gocv.NewMat()
	img_Add := gocv.NewMat()
	gocv.CvtColor(imgA, &img_gray, 6)
	gocv.AddWeighted(imgA, 0.5, imgB, 0.5, 1.0, &img_Add)
	gocv.IMWrite("./GrayImg.jpg", img_gray)
	gocv.IMWrite("./ImgAdd.jpg", img_Add)
}

■重畳結果

Go言語で重畳した結果も合わせて載せておきます。
重畳させる画像はそれぞれ、<画像ファイル1>
f:id:Elsammit:20201107205137j:plain
<画像ファイル2>
f:id:Elsammit:20201018210406j:plain
を用いました。

重畳させた結果はこちらになります。
f:id:Elsammit:20201107205717j:plain

■最後に

pythonに引き続き、Go言語での重畳方法についてまとめてみました。
Go言語でも動画の重畳を実施してみようかと思ったのですが、ちょっと苦戦中。。。
こちらは現在確認中ですので、分かりましたら載せていこうと思います!!