画像をネガポジ反転する

画像のネガポジ変換も CvCppクラスではなく CvクラスのNotメソッドで行います。テストはボタンを一個作成しボタンをクリックすることで ネガ・ポジを切り替えるようにしました。ボタンをクリックした時 Mat⇒CvMat 反転 CvMat⇒Mat の処理を行っています。一般には ネガポジ変換はグレースケール画像のサンプルが多いのですが ここではわざとカラー画像で行いました。

 コーディング 
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 OpenCvShpCpp
{
  public partial class Form1 : Form
  {
    private Mat mat;
    private Boolean flag;
    public Form1() {
      InitializeComponent();
    }
    private void timer1_Tick(object sender, EventArgs e) {
      mat = new Mat(@"C:OpenCvTestDatasaboten.jpg", LoadMode.Color);
      flag = false;
      timer1.Enabled = false;
      pictureBox1.Invalidate();
    }
    private void btnNega_Click(object sender, EventArgs e) {
      CvMat img = (CvMat)mat;
      Cv.Not(img,img);
      mat = new Mat(img);
      img.Dispose();
      flag = !flag;
      pictureBox1.Invalidate();
    }
    private void pictureBox1_Paint(object sender, PaintEventArgs e) {
      if (!timer1.Enabled) { //画像データ読み込み済み判断にtimerのEnableを使っている
        Bitmap bmp = new Bitmap(mat.Cols, mat.Rows);
        bmp = mat.ToBitmap();
        e.Graphics.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);
        bmp.Dispose();
        if (flag){
          this.Text = "ネガ";
        }
        else {
          this.Text = "ポジ";
        }
      }
    }
  }
}

OpenCvSharp.CPlusPlusを使わないで OpenCvSharpだけ使ったサンプルは

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using OpenCvSharp;

namespace OpenCvShp
{
    public partial class Form1 : Form
    {
        private IplImage img;
        private Boolean flag;
        public Form1()
        {
            InitializeComponent();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            img = new IplImage(@"C:OpenCvTestDatasaboten.jpg", LoadMode.Color);
            timer1.Enabled = false;
            flag = false;
            pictureBox1.Invalidate();
        }
        private void btnNega_Click(object sender, EventArgs e)
        {
            Cv.Not(img, img);
            flag = !flag;
            pictureBox1.Invalidate();
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            if (!timer1.Enabled) //画像データ読み込み済み判断にtimerのEnableを使っている
            {
                Bitmap bmp = new Bitmap(img.Width, img.Height);
                bmp = img.ToBitmap();
                e.Graphics.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);
                bmp.Dispose();
            }
        }
    }
}
 処理結果 
ポジ画像 ネガ画像

 Windows7 Vs2008 OpenCv2.4 And OpenCvSharp
スポンサーリンク
Rectangle大広告
Rectangle大広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする