GIF画像を読む
ライセンス上の理由により、GIF 画像は opencv で読み込むことができません。代わりに、ビデオキャプチャまたはサードパーティの PIL ライブラリ (Python) を使用します。ただし、実際には、Golang の基本ライブラリにはimage
GIF 画像を読み取る方法があります。簡単な例は次のとおりです
func ReadAndShowGIF(filename string) {
w := gocv.NewWindow(filename)
f, _ := os.Open(filename)
defer f.Close()
gi, _ := gif.DecodeAll(f)
for k, v := range gi.Image {
img, err := gocv.ImageToMatRGB(v)
if err != nil {
log.Fatal(err)
}
w.IMShow(img)
w.WaitKey(gi.Delay[k] * 10) // delay 单位是百分之一秒,waitkey参数为毫秒
}
w.WaitKey(0)
}
ここでは gif 画像は 1 回だけ再生されます。また、gif 内の LoopCount を解析してループ再生ロジックを追加することもできます。
mp4ビデオファイルを読み取る
まず、 cmake のインストール中に依存関係が正常にインストールされていることを確認しますopencv_ffmpeg_64.dll and opencv_ffmpeg.dll
。そうしないと、 またはgocv.VideoCaptureFile
の呼び出しgocv.OpenVideoCapture
時にエラーが報告されますError opening file: showimage/video1.mp4
。
opencv がコンパイルされてインストールされているパスを開きますC:\opencv\build\lib
が、これら 2 つの依存関係が実際には見つからないので、どうすればよいでしょうか?
opencv をコンパイルすると、まず現在のシステムに ffmpeg がインストールされているかどうかがチェックされ、インストールされていない場合は、ダウンロードしてインストールされます。ただし、ダウンロード中に失敗する可能性があるため、この依存関係はインストールされません。ダウンロード失敗が見られるので、opencv/build/CMakeDownloadLog.txt
ラダーソフトを開いてopencvを再コンパイルします。
gocv.VideoCaptureFile(filename)
または を使用してビデオ ファイルを読み取りgocv.OpenVideoCapture(filename)
、フレームごとに処理します。
func ReadAndShowVideo(filename string) {
w := gocv.NewWindow(filename)
vc, err := gocv.VideoCaptureFile(filename)
if err != nil {
fmt.Println(err)
return
}
mat := gocv.NewMat()
for {
if vc.Read(&mat) {
w.IMShow(mat)
w.WaitKey(10)
} else {
break
}
}
w.WaitKey(0)
}
実際、ReadAndShowVideo
関数を使用して GIF 画像を読み取ることもできますが、ReadAndShowGIF
コントロールほど詳細ではありません。