OpenCVSharpを使用してWebカメラからキャプチャーして、差分を動画で表示する。
処理は、静止画の時とほぼ同じ。
一応より差分を分かりやすくするためにぼかしを入れている。
- [void][System.Reflection.Assembly]::LoadFrom((Join-Path $pwd OpenCvSharp.dll))
- # カメラの情報を取得
- $camera = [OpenCvSharp.CvCapture]::FromCamera(0)
- $window = New-Object OpenCvSharp.CvWindow("SampleCapture")
- while ( [OpenCvSharp.CvWindow]::WaitKey(10) -lt 0 ) {
- $iplImage = $camera.QueryFrame()
- $srcIplImage = New-Object OpenCvSharp.IplImage( $iplImage.Size, [OpenCvSharp.BitDepth]::U8, 1)
- # グレースケールに変換
- [OpenCvSharp.Cv]::CvtColor($iplImage,$srcIplImage, [OpenCvSharp.ColorConversion]::BgraToGray)
- $dstIplImage1 = New-Object OpenCvSharp.IplImage( $srcIplImage.Size, [OpenCvSharp.BitDepth]::U8, 1)
- # ぼかし
- $srcIplImage.Smooth($srcIplImage, [OpenCvSharp.SmoothType]::Blur, 5)
- # 白黒に変換
- $srcIplImage.Threshold($dstIplImage1, 128, 255, [OpenCvSharp.ThresholdType]::Binary)
- # 差分出力先
- $dstIplImage2 = New-Object OpenCvSharp.IplImage($dstIplImage1.Size, $dstIplImage1.Depth, $dstIplImage1.NChannels)
- if ($tempIplImage -ne $null) {
- # 差分をとる
- [OpenCvSharp.Cv]::AbsDiff($dstIplImage1, $tempIplImage, $dstIplImage2)
- # 差分を表示する
- $window.Image = $dstIplImage2
- }
- # 今回の元データをTempに入れる
- $tempIplImage = $dstIplImage1
- }
- $iplImage.Dispose()
- $srcIplImage.Dispose()
- $dstIplImage1.Dispose()
- $dstIplImage2.Dispose()
- $tempIplImage.Dispose()
- $window.Dispose()
- $camera.Dispose()
0 コメント:
コメントを投稿