前回 OpenCvSharpをインストールしサンプルプログラムを作って動いたと書きました。
現役時代にも 携わることの多かった .Netだけに スンナリと入れると思いましたが 残念ながら クラスがCvクラス・CvCppクラスとクラスをまたがったり メソッドによって扱えるイメージがMatであったり IplImageであったりと 戸惑うことが一杯!!
WEBから 本家Schimaさんが作られたHelp・Sampleのダウンロードも可能ですが、理解を深めるため Android版で行ったように OpenCvSharpでも OpenCvCookBookの画像処理で取り上げているテーマをひとつひとつC#を使ってWindowsアプリで実験してみることにします。可能な限りAndroid版で少しはなじんだMatを使ったやり方 つまりはC++系メソッドで進めたいと思っています。もっともパラメータをいろいろ変えた場合の比較は おそらくAndroid版と大差ないものと思い 殆どワンパターンのコーディング集的な内容で進めます。 実は自分自身の備忘録としてまとめていこうかと・・
最初のテーマは 『画像を単色で塗りつぶす』
動作環境
OpenCv・OpenCvSharp Ver2.4
使用OS Windows7 Pro
VisualStudio 2008
プロジェクトで参照設定するDLL
OpenCvSharp.dll
OpenCvSharp.CPlusPlus.dll
さらに OpenCvSharpExtern.dll を exeが書き込まれるFolderに配置
コーディング
(Form1.cs)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.CPlusPlus; namespace OpenCvShp { public partial class Form1 : Form { private Mat mat; private Boolean flg = false; public Form1(){ InitializeComponent(); } private void pictureBox1_Paint(object sender, PaintEventArgs e){ if (flg){ // どれかのボタンがクリックされたか? Bitmap bmp = new Bitmap(mat.Cols, mat.Rows); bmp = mat.ToBitmap(); // MatをBitmapに変換 e.Graphics.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height); bmp.Dispose(); } } private void btnRed_Click(object sender, EventArgs e){ fnc(new CvScalar(0, 0, 255)); // CvScalarの順番は BGR RGBでは無い!! } private void btnGreen_Click(object sender, EventArgs e){ fnc(new CvScalar(0, 255, 0)); } private void btnBlue_Click(object sender, EventArgs e){ fnc(new CvScalar(255, 0, 0)); } private void fnc(CvScalar scalar){ mat = new Mat(new CvSize(160, 160), MatrixType.U8C3, scalar); flg = true; pictureBox1.Invalidate(); } } }
実行結果
Redボタンをクリックしたところ
Windows7 Vs2008 OpenCv2.4 And OpenCvSharp |