PowerShellで動画の差分をとってみる

| 2009年11月13日金曜日
OpenCVSharpを使用してWebカメラからキャプチャーして、差分を動画で表示する。

処理は、静止画の時とほぼ同じ。
一応より差分を分かりやすくするためにぼかしを入れている。
  1. [void][System.Reflection.Assembly]::LoadFrom((Join-Path $pwd OpenCvSharp.dll))
  2. # カメラの情報を取得
  3. $camera = [OpenCvSharp.CvCapture]::FromCamera(0)
  4. $window = New-Object OpenCvSharp.CvWindow("SampleCapture")
  5. while ( [OpenCvSharp.CvWindow]::WaitKey(10) -lt 0 ) {
  6. $iplImage = $camera.QueryFrame()
  7. $srcIplImage = New-Object OpenCvSharp.IplImage( $iplImage.Size, [OpenCvSharp.BitDepth]::U8, 1)
  8. # グレースケールに変換
  9. [OpenCvSharp.Cv]::CvtColor($iplImage,$srcIplImage, [OpenCvSharp.ColorConversion]::BgraToGray)
  10. $dstIplImage1 = New-Object OpenCvSharp.IplImage( $srcIplImage.Size, [OpenCvSharp.BitDepth]::U8, 1)
  11. # ぼかし
  12. $srcIplImage.Smooth($srcIplImage, [OpenCvSharp.SmoothType]::Blur, 5)
  13. # 白黒に変換
  14. $srcIplImage.Threshold($dstIplImage1, 128, 255, [OpenCvSharp.ThresholdType]::Binary)
  15. # 差分出力先
  16. $dstIplImage2 = New-Object OpenCvSharp.IplImage($dstIplImage1.Size, $dstIplImage1.Depth, $dstIplImage1.NChannels)
  17. if ($tempIplImage -ne $null) {
  18. # 差分をとる
  19. [OpenCvSharp.Cv]::AbsDiff($dstIplImage1, $tempIplImage, $dstIplImage2)
  20. # 差分を表示する
  21. $window.Image = $dstIplImage2
  22. }
  23. # 今回の元データをTempに入れる
  24. $tempIplImage = $dstIplImage1
  25. }
  26. $iplImage.Dispose()
  27. $srcIplImage.Dispose()
  28. $dstIplImage1.Dispose()
  29. $dstIplImage2.Dispose()
  30. $tempIplImage.Dispose()
  31. $window.Dispose()
  32. $camera.Dispose()

0 コメント: