読者です 読者をやめる 読者になる 読者になる

catalinaの備忘録

ソフトウェアやハードウェアの備忘録。後で逆引きできるように。

何か新しいことに挑戦(visual studio2015, opencv3.0, VTK 等)

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, androidiOS向けのプロジェクトもビルドできるらしい。

試しにソリューションを生成してみたけど、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とか使って。。とか。めんどいというか、なんか色々大変。

MSがデバッグ支援拡張機能出してくれてました。

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エンコードして動画にまとめちゃう~なんてこともできるのかも。