您的位置:首页 > 编程语言 > C#

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));";

        }

    }

}

运行结果如下图所示:





 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: