opencv(sharp)のMatの種類について
皆さんどうもこんにちは。お久しぶりです。最近、opencvsharpを使う機会が増えて、CPUだけじゃちょっと遅かったので、調べると、他にも3つのMatがありました。さすがのopencv勢(python)(?)もびっくり。
注意: これは話を盛ってる部分や、雑に調べて書いてることがあるのでそこはご了承ください
- Matの種類
- Mat / 超基本中の基本
- GPUMat / Nvidia最高!の全盛期
- oclmat / なんか作ってみたけど人気なさすぎて一瞬で消えてった黒歴史Mat
- UMat / ユーザーフレンドリーになろう精神で生まれたopencl使っちゃうMatさん
- そして...
- まとめ
Matの種類
すごい初歩的ですが、かんたんにMatのおさらい。
Matはopencv(C++,C#,etc)で使用するときに画像などを入れておく変数の型です。Listだと遅いじゃん!メモリやばいじゃん!(python脳)とかなっちゃうので、作ったんだと思います。詳しくは、公式wiki参照。
そして、Matには上記に記したように4種類Matがあるわけですよ。
Mat / 超基本中の基本
上にも書いたとおり、公開当初からある型です。詳細は上のwiki参照。説明は以上!
GPUMat / Nvidia最高!の全盛期
で、強欲な人間たちはこう考えるわけですよ。
という声が上がり、2009年、opencvは2系でGPUMatというものを実装。ただしこれには1つ問題が。
NvidiaのGPU、それもCUDAでしか動かない! (現在もこの状況です)
でもCUDA使ってるのでほぼ低水準で動くのでめちゃめちゃ早いです。比べ物になりません。
oclmat / なんか作ってみたけど人気なさすぎて一瞬で消えてった黒歴史Mat
2.4系で出てきたやつですけどもう使えないのであえて書きません。なんか書き方特殊でやりづらかったらしいです。今までの物語が続かなくなってしまうし()
どうしても知りたい方はこちらから。
www.slideshare.net
UMat / ユーザーフレンドリーになろう精神で生まれたopencl使っちゃうMatさん
でも、人間はまだまだ強欲です。GPUMatはできたけど次はAMDとIntel(オンボード)勢から袋たたきになるわけですよ。
Nvidiaしか対応しないとか贔屓だろ!ふざけんな!ユーザーフレンドリーがなってない!
そういう叩かれ方をしたので2015年、oclmatの後継として、このUMatができました。 oclmatとは違って、色々書き方がGPUMat等に似ているそうです。詳細はこちらから。
これは、openclを使って大体のGPU対応をしながら、CPUじゃなくてGPUを使っちゃうっていういいとこ取りをしちゃった最強Matです。(CUDAにはかなわない)
そして...
今は4.5.2。MatとGPUMat,UMatがこのMat戦争(?)に生き残り今もどこかのプログラムの一部として活躍しています。めでたしめでたし。
ということです。要するに
って感じです。詳細は各リンクを御覧ください。
まとめ
結構分かりづらかったのでメモ的に書こうと思ったら勢い乗ってしまった...
個人的な質問等はこちらまで。
https://forms.gle/V6NRhoTooFw15hJdA
また、自分が参加しているRobocup soccer シミュレーションリーグのチームでは参加者募集中です!活動の見学、活動に参加したい方、ご連絡お待ちしております!
詳しくはこちら