Windows10にアップグレードしてみると想像以上にまともになってて驚きました。かたりぃなです。
MetroUIは残念なコだったけど、Windows10になって以前は全画面で展開されてたMetroがスタートメニューの右にちょろっとくっついてくるだけでした。やっぱ全画面持っていったりしないってのは大事だね。
このアップグレードのおかげで何か作ってみようかなと趣味プログラムを復活するきっかけになりました。
とは言いつつ、Windows上でVM立ち上げてたら以前とやってることが同じ。これじゃあつまらない。
せっかくだしVisualStudio2015使って何かやることにしました。windowsストアアプリ開発者アカウントもあるんだし(ずっと使ってないけど)。
色々やったせいであたまごちゃごちゃなので、細かい手順は別の投稿で。
やってみたこと
- VisualStudio2015を使う
- VisualStudio2015からGitリポジトリ叩いてみた
- Windows用のGitHubアプリがあるので入れてみた
- Windows用のcmake(GUI版)を入れてみた
- opencv 3.0を動かしてみた
- VisualStudio上でのopencvのデバッグ支援ツールがMSから出てたので試した
- opencv のvizモジュールを使ってみた
- vizを使うためにVTKをビルドしてみた
- viz経由でopenglを叩く
VisualStudio2015
しばらくご無沙汰してる間にずいぶん進化してました。
すごいなと思った点をいくつか。
1, androidやiOS向けのプロジェクトもビルドできるらしい。
試しにソリューションを生成してみたけど、android, iOS, windows-phoneそれぞれのプロジェクトが中に入ってた。なんかすげぇ。当面使うことないだろうけど。
2, gitとの連携がIDE上から直接できる
メニュー -> チーム -> 接続の管理でリポジトリに接続
Githubへの接続もできた。とりあえずcloneできるところまで試した。
コマンドラインに慣れてるせいか日本語訳されたメニューがちょっと気持ち悪い
まあいざとなればgit shellアプリがあるから、こいつ起動してコマンドラインからいじればなんとかなりそう。
windows版cmake
GUI画面見て戸惑ったけど、やってることはコマンドラインと同じだった。
configureしてgenerateするとVisualStudio向けソリューションとプロジェクトが生成される。
試しにopencvとvtkをcmakeしてからVisualStudioでビルドしてみた。
プロジェクト全ビルドした後で「install」プロジェクトをビルドしないとインストールされない点が気になったけど、だいたい想定通り。
躓いたポイントは、cmakeの時点でコンパイラチェックするので通常使用するコンパイラを指定しておかなきゃいけなかった。(昔入れてた2012とかの残骸があった)
これをしっかり確認して合わせておかないと、cmakeで生成されたプロジェクトで使用するコンパイラがVisualStudio2012になっていたりして、実行ファイルを作ろうとしたときにライブラリとのバージョン違いで怒られる(opencvは2012でビルドしたのにアプリを2015でビルドしてるからリンクできないよ!)と。
opencv 3.0とvtk
vtkはデータの可視化ツール。内部ではopenglを使ってるっぽい。(リンクエラー出て気づいた)。
opencvのmatクラスをそのまま渡せるし、色々と便利に使えそう。
使い方は、opencvとvtkそれぞれビルドしてライブラリ吐かせておく。アプリはそのライブラリをリンクするだけでOK。
NuGetからでも行けるかもしれない。試してないけど。
ビルドが成功したらinstallプロジェクトをビルドしてインストールしておくのを忘れずに。インストール先ディレクトリはcmakeで指定したところになる。(これ忘れてると、アプリのビルド時にincludeできないエラーでハマる)
ライブラリ名の命名規則が大きく変わってる「opencv_"モジュール名""バージョン番号""デバッグビルドの場合はdを付与".lib」
vtkとは関係ないけど、カメラキャプチャの機能があったので叩いてみた。(opencvからDirectShowを叩く)
やりたいことが簡単に実現できました。10行くらい。
visualstudioでのopencvのデバッグ支援
画像処理のプログラムをかいてると、デバッグ大変ですよね?
適当な個所でcv::imwrite("test.jpg")とか。連番で出したいからitoaとか使って。。とか。めんどいというか、なんか色々大変。
https://visualstudiogallery.msdn.microsoft.com/e682d542-7ef3-402c-b857-bbfba714f78d
これを使えば、VisualStudioのデバッガで変数をポチるだけで画像が表示される。すげー。
このページが一通り網羅してたので分かりやすいです。
http://www.buildinsider.net/small/opencv/06
opencvのvizモジュール
3Dビジュアライザ。openGLなんかの3Dレンダリングエンジンを叩いて画像を作れる。
このブログの以前のエントリでopencvで解析, Rでグラフ表示とかしてたのを、opencv上だけで実現できそう。
ドキュメントはこのあたり。
http://docs.opencv.org/2.4/modules/viz/doc/viz.html
モジュールの依存関係は アプリケーション -> opencv::viz -> VTK -> OpenGLっぽい。
最後のOpenGLはVTKのcmakeオプションで他のものも選択できそう。
ちなみにWindows上で動かすにはOpenGL32.Libをリンクする必要がある。*32.libとか名前ついてるのに"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64"とかに置いてあったりして気持ち悪いけど。
まとめ・今後の展望
着手はじめたときはopenCV + DirectXで何かできないかなと思ってたけど、opencvからopenGL叩けるならDirectXにこだわる理由も無い気がしてきた。
無理せず何かを作っていこう。
気になったこと
opencvのcmakeオプションのWITH_FFMPEGも合わせて使えば、cv::vizのレンダリング結果をffmpegでエンコードして動画にまとめちゃう~なんてこともできるのかも。