画像のネガポジ変換も 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 |