Emgu CV(OpenCV for C#)学习笔记(2)

 

第二个例子:访问图像数据

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

        }
    }
}
运行结果如下图所示:


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值