ベテラン・プログラマの密かなつぶやき

日々の仕事で得たプログラミングの知識を咀嚼してまとめています

画像処理、はじめの一歩

c++c#を使って何を作るか。やっぱり画像処理でしょう。

仕事の実績を棚卸したところでも結構画像処理には縁があった。

そして画像処理といえば今では定番となったopenCVを使いこなすことが必須となる。

構成は画面周りをc#で作成してc#からopenCVを呼び出し、その結果をc#の画面に反映させるという感じが自分にとってはしっくりくる。

c#からダイレクトにopenCVを呼び出すことができないので間にラッパーを挟み込む。手法はいくつかあるようだが、c++/CLIのDLLを作成してc#から作成したDLLを呼び出し、DLL経由でopenCVにリーチするというやり方。面倒だが一度作ってしまえば適用範囲は広いのでプロジェクトの構成はこれで決まった。

次にDLL内に作成するクラスだが、ここでかなり苦労した。わかってしまえばすべてメモリ管理の話になるのだが、マネージドクラスだとか参照クラスだとか、あるいはgcnewやrefなどキーワードがいっぱい出てきてかなり焦った。結局確保したメモリの管理で開放を明示するかガベージコレクションに任せるかという話に過ぎないことがわかって頭を切り替えてとにかくこう記述しないといけないのだという理解だけでコーディング。

ちょっと強引だったが何とか1日で画像をファイルから読み込んでopenCVで加工し、その結果をc#の画面に表示させることまではできた。ちょっとソースが汚いので公開はまだ先に延ばすが、GitHubにでも登録して公開はするつもり。

こういうプロジェクトが1つ手元にあればそれだけで武器になると思う。問題はそれを使って最終的に何がしたいかなんだけど。次のステップはカメラ画像に挑戦するということだけ宣言しておく。