前回 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 |