PowerShellで画像の色をカウントする

| 2009年11月6日金曜日
OpenCVSharpを使用して画像の白、黒、赤、青、緑、黄色、マゼンタ、シアン、その他の色に該当する色を数えてみる。
下のコードには、その色に該当するかについて、あそびをまったく入れていないのでほとんどが、その他の色になってしまう。
けど、今回は、白黒画像をカウントする事が目的で、白と黒だけちゃんと取れればよかっただけなのでこれで良しとする。
今度、ある程度まともな条件で取得できるようにしよう。
あと、この方法だとかなり遅いので、なにか別な取得方法がないかについても調べておこう。
  1. [void][System.Reflection.Assembly]::LoadFrom((Join-Path $pwd OpenCvSharp.dll))
  2. $iplImage = [OpenCvSharp.Cv]::LoadImage((Join-Path $pwd "foo.jpg"))
  3. for ($x = 0; $x -lt $iplImage.Width; $x++) {
  4. for ($y = 0; $y -lt $iplImage.Height; $y++) {
  5. # CvColor型にキャスト
  6. $cvColor = [OpenCvSharp.CvColor]$iplImage.Get2D($y, $x)
  7. $count++
  8. switch ($cvColor) {
  9. {$_ -eq [OpenCvSharp.CvColor]::White} {
  10. $white++
  11. break
  12. }
  13. {$_ -eq [OpenCvSharp.CvColor]::Black} {
  14. $black++
  15. break
  16. }
  17. {$_ -eq [OpenCvSharp.CvColor]::Red} {
  18. $red++
  19. break
  20. }
  21. {$_ -eq [OpenCvSharp.CvColor]::Blue} {
  22. $blue++
  23. break
  24. }
  25. {$_ -eq [OpenCvSharp.CvColor]::Green} {
  26. $green++
  27. break
  28. }
  29. {$_ -eq [OpenCvSharp.CvColor]::Yellow} {
  30. $yellow++
  31. break
  32. }
  33. {$_ -eq [OpenCvSharp.CvColor]::Magenta} {
  34. $magenta++
  35. break
  36. }
  37. {$_ -eq [OpenCvSharp.CvColor]::Cyan} {
  38. $cyan++
  39. break
  40. }
  41. default {
  42. $other++
  43. }
  44. }
  45. }
  46. }
  47. Write-Host White = ($white / $count).ToString("00.0%")
  48. Write-Host Black = ($black / $count).ToString("00.0%")
  49. Write-Host Red = ($red / $count).ToString("00.0%")
  50. Write-Host Blue = ($blue / $count).ToString("00.0%")
  51. Write-Host Green = ($green / $count).ToString("00.0%")
  52. Write-Host Yellow = ($yellow / $count).ToString("00.0%")
  53. Write-Host Magenta = ($magenta / $count).ToString("00.0%")
  54. Write-Host Cyan = ($cyan / $count).ToString("00.0%")
  55. Write-Host Other = ($other / $count).ToString("00.0%")
  56. $iplImage.Dispose()

0 コメント: