Emgu CV(OpenCV for C#)学习笔记(2)
2013-11-14 00:02
393 查看
第二个例子:访问图像数据
Emgu CV处理图像是极其方便的。先了解一点图像方面的语法:
一、创建图像
若要创建一个480*320的Bgr color,8-bit unsigned深度图像: Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(480, 320);
指定图像的背景color值,假设颜色为蓝色: Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(480, 320, new Bgr(255, 0, 0));
二、从文件中读入图像
如果图像文件的目录名是"MyImage.jpg",从文件中读入并创建图像: Image<Bgr, Byte> img1 = new Image<Bgr, Byte>("MyImage.jpg");
三、从.Net Bitmap对象创建图像
如果“bmp”是 Bitmap对象,从.Net Bitmap对象创建图像: Image<Bgr, Byte> img = new Image<Bgr, Byte>(bmp);
四、像素的获取
彩图时:Bgr my_Bgr = My_Image[0, 0];//获取My_Image图像[0, 0]处的bgr像素值;
灰度图时:Gray my_Gray = gray_image[0, 0]];//获取My_Gray图像[0, 0]处的gray像素值;
五、像素的赋值
(1)按位置指定或写入像素值
//彩图
My_Image[0, 0] = new Bgr(Color.Red);
//灰度图
gray_image[0, 0] = new Gray(200);
(2)按数据属性指定或写入像素值
//彩图时
Color R = Color.Red;
My_Image.Data[0,0,2] = R.R; //红
My_Image.Data[0,0,1] = R.G; //绿
My_Image.Data[0,0,0] = R.B; //蓝
//灰度图时
gray_image[0, 0] = new Gray(200);
六、像素的转换
(1) BGR转化成int(把value.Red替换成数字)
//Color my_colour = Color.FromArgb((int)value.Red, (int)value.Blue, (int)value.Green);
Color my_colour = Color.FromArgb(100, 200, 250);
//Gray 转化成 int
int my_intensity = (int)my_Gray.Intensity;
(2)直接用数据属性转换
//Colour
Color my_colour1 = Color.FromArgb(My_Image.Data[0, 0, 0],
My_Image.Data[0, 0, 1], My_Image.Data[0, 0, 2]);
//Gray Image
int my_intensity1 = gray_image.Data[0, 0, 0];
七、图像显示
(1)使用ImageBox;
(2)转换为位图使用windows form中的PictureBox控件。例如:
Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(Openfile.FileName);
pictureBox1.Image = My_Image.ToBitmap();
融合以上知识,完成第二个示例。新建项目,添加相关控件,贴代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.UI;
using Emgu.CV.Structure;
namespace UserGuideExample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Image<Bgr, Byte> My_Image;
Image<Gray, byte> gray_image;
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog Openfile = new OpenFileDialog();
if (Openfile.ShowDialog() == DialogResult.OK)
{
//显示彩图
My_Image = new Image<Bgr, byte>(Openfile.FileName);
pictureBox1.Image = My_Image.ToBitmap();
textBox1.Visible = true;
label1.Visible = true;
button2.Enabled = true;
label1.Text = "1 Rgb彩色图";
label2.Text = "";
pictureBox2.Image = null;
label3.Visible = false;
label4.Visible = false;
}
}
private void button2_Click(object sender, EventArgs e)
{
textBox2.Visible = true;
label2.Visible = true;
button3.Enabled = true;
//显示灰度图
gray_image = My_Image.Convert<Gray, byte>();
pictureBox2.Image = gray_image.ToBitmap();
label2.Text = "2 灰度图";
}
private void button3_Click(object sender, EventArgs e)
{
textBox3.Visible = true;
button4.Enabled = true;
//按位置指定像素值
My_Image[0, 1] = new Bgr(Color.Red);
My_Image[1, 0] = new Bgr(Color.Red);
My_Image[1, 1] = new Bgr(Color.Red);
My_Image[1, 2] = new Bgr(Color.Red);
My_Image[2, 1] = new Bgr(Color.Red);
pictureBox1.Image = My_Image.ToBitmap();
}
private void button4_Click(object sender, EventArgs e)
{
textBox4.Visible = true;
button5.Enabled = true;
//按数据属性指定像素值
Color R = Color.Blue;
My_Image.Data[3, 3, 2] = R.R; //Write to the Red Spectrum
My_Image.Data[3, 3, 1] = R.G; //Write to the Green Spectrum
My_Image.Data[3, 3, 0] = R.B; //Write to the Blue Spectrum
pictureBox1.Image = My_Image.ToBitmap();
}
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Visible = false;
textBox2.Visible = false;
textBox3.Visible = false;
textBox4.Visible = false;
textBox5.Visible = false;
textBox6.Visible = false;
label1.Visible = false;
label2.Visible = false;
label3.Visible = false;
label4.Visible = false;
btnCreatImage.Enabled = true;
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
button5.Enabled = false;
button6.Enabled = false;
button7.Enabled = false;
}
private void button6_Click(object sender, EventArgs e)
{
textBox6.Visible = true;
}
private void button5_Click(object sender, EventArgs e)
{
textBox5.Visible = true;
button6.Enabled = true;
}
private void btnCreatImage_Click(object sender, EventArgs e)
{
Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(480, 320);
pictureBox1.Image = img1.ToBitmap();
label1.Text = "创建一个480*320的Bgr color,8-bit unsigned深度图像";
label1.Visible = true;
label3.Visible = true;
button7.Enabled = true;
label3.Text = "创建代码:Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(480, 320);";
}
private void button7_Click(object sender, EventArgs e)
{
Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(480, 320, new Bgr(255, 0, 0));
pictureBox2.Image = img1.ToBitmap();
label2.Text = "指定图像的背景color值,假设颜色为蓝色";
label2.Visible = true;
label4.Visible = true;
button1.Enabled = true;
label4.Text = "创建代码:Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(480, 320, new Bgr(255, 0, 0));";
}
}
}
运行结果如下图所示:
相关文章推荐
- Emgu.CV,OpenCV for C#
- VS2010、C#、Emgu CV配置 ; 在C#下使用OpenCV ; C#中使用OpenCV(Emgu CV)
- 【C# -- OpenCV】Emgu CV 第一个实例
- C#下的openCV(Emgu CV)
- C#中使用OpenCV(Emgu CV)
- C#下的openCV(Emgu CV)
- VS2008 C# OpenCV “Emgu.CV.CvInvoke”的类型初始值设定项引发异常。
- 【C# -- OpenCV】Emgu CV 第一个实例
- C#下使用openCV(Emgu CV)
- C#下的openCV(Emgu CV)
- VS2010、C#、Emgu CV配置 ; 在C#下使用OpenCV ; C#中使用OpenCV(Emgu CV); 配置全程截图,不能请留言!
- C#调用OpenCV(一) 配置VS+OpenCV+Emgu cv
- C#下的openCV(Emgu CV)
- VS2010、C#、Emgu CV配置 ; 在C#下使用OpenCV ; C#中使用OpenCV(Emgu CV); 配置全程截图
- VS2010、C#、Emgu CV配置 ; 在C#下使用OpenCV ; C#中使用OpenCV(Emgu CV); 配置全程截图
- Emgu CV(OpenCV for C#)学习笔记(1)
- C# OPenCV(Emgu) (转载加编辑)
- C# 中使用OPenCV(Emgu)心得
- C# 中使用OPenCV(Emgu)心得
- 利用Emgu.CV实现人脸识别详解 (C#)--附源码