kumitatepazuru's blog

中学生のメモブログ。みんなの役に立ちたい。

opencv(sharp)のMatの種類について

f:id:kumitatepazuru:20210410193824p:plain

皆さんどうもこんにちは。お久しぶりです。最近、opencvsharpを使う機会が増えて、CPUだけじゃちょっと遅かったので、調べると、他にも3つのMatがありました。さすがのopencv勢(python)(?)もびっくり。

注意: これは話を盛ってる部分や、雑に調べて書いてることがあるのでそこはご了承ください

Matの種類

すごい初歩的ですが、かんたんにMatのおさらい。

Matはopencv(C++,C#,etc)で使用するときに画像などを入れておく変数の型です。Listだと遅いじゃん!メモリやばいじゃん!(python脳)とかなっちゃうので、作ったんだと思います。詳しくは、公式wiki参照。

docs.opencv.org

docs.opencv.org

そして、Matには上記に記したように4種類Matがあるわけですよ。

Mat / 超基本中の基本

上にも書いたとおり、公開当初からある型です。詳細は上のwiki参照。説明は以上!

GPUMat / Nvidia最高!の全盛期

で、強欲な人間たちはこう考えるわけですよ。

CPU遅すぎる!最近GPUを高速計算させる仕組みできたらしいからその機能使ってopencvにもGPU使わせろ!

という声が上がり、2009年、opencvは2系でGPUMatというものを実装。ただしこれには1つ問題が。

NvidiaGPU、それもCUDAでしか動かない! (現在もこの状況です)

でもCUDA使ってるのでほぼ低水準で動くのでめちゃめちゃ早いです。比べ物になりません。

oclmat / なんか作ってみたけど人気なさすぎて一瞬で消えてった黒歴史Mat

2.4系で出てきたやつですけどもう使えないのであえて書きません。なんか書き方特殊でやりづらかったらしいです。今までの物語が続かなくなってしまうし()

どうしても知りたい方はこちらから。

www.slideshare.net

UMat / ユーザーフレンドリーになろう精神で生まれたopencl使っちゃうMatさん

でも、人間はまだまだ強欲です。GPUMatはできたけど次はAMDIntel(オンボード)勢から袋たたきになるわけですよ。

Nvidiaしか対応しないとか贔屓だろ!ふざけんな!ユーザーフレンドリーがなってない!

そういう叩かれ方をしたので2015年、oclmatの後継として、このUMatができました。 oclmatとは違って、色々書き方がGPUMat等に似ているそうです。詳細はこちらから。

qiita.com

これは、openclを使って大体のGPU対応をしながら、CPUじゃなくてGPUを使っちゃうっていういいとこ取りをしちゃった最強Matです。(CUDAにはかなわない)

そして...

今は4.5.2。MatとGPUMat,UMatがこのMat戦争(?)に生き残り今もどこかのプログラムの一部として活躍しています。めでたしめでたし。

ということです。要するに

  • Mat CPUしか使わん
  • GPUMat GPU使うけどNvidiaのCUDAだけ!
  • UMat opencl使って大体のGPU対応!

って感じです。詳細は各リンクを御覧ください。

まとめ

結構分かりづらかったのでメモ的に書こうと思ったら勢い乗ってしまった...


個人的な質問等はこちらまで。

https://forms.gle/V6NRhoTooFw15hJdA

また、自分が参加しているRobocup soccer シミュレーションリーグのチームでは参加者募集中です!活動の見学、活動に参加したい方、ご連絡お待ちしております!

詳しくはこちら

kumitatepazuru.github.io