c#+EmguCv 图像灰度化

来源:互联网 发布:mac怎么关闭加密文件夹 编辑:程序博客网 时间:2024/06/07 18:21

 刚刚入手c# ,并利用EmguCv 处理图像, 一时不知从何入手。首先看灰度化,代码如下:

  namespace EmgCv_Demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            OpenFileDialog Openfile = new OpenFileDialog();
            if (Openfile.ShowDialog() == DialogResult.OK)
            {
                Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(Openfile.FileName);
                pictureBox1.Image = My_Image.ToBitmap(); // pictureBox1 只能够显示位图,因此必须进行转换
                 Image<Gray,byte> gray_image = My_Image.Convert<Gray,byte>(); ///灰度化函数
     

                 //Gray Image
                 for (int i = 0; i < 100; i++)
                     for (int j = 0; j < 100;j++ )
                         gray_image[i, j] = new Gray(255); //给灰度图像赋值   i is the row  j is the col

 

                 //Gray Image
          //       Gray my_Gray = gray_image[10, 20];
                 //Gray to int
              //  int my_intensity = (int)my_Gray.Intensity;

         //读取指定位置的灰度值


                // int my_intensity = gray_image.Data[10, 20,0]; //读取指定位置的像素值

                 int my_intensity = (int)gray_image[10, 20].Intensity;


                 int kkk=0;

                 pictureBox2.Image = gray_image.ToBitmap(); // 显示灰度化后的图像
            }

        }
}

 

   虽然实现了功能,还是有个问题不理解,为什么灰度化后的图像用matlab读出来还是三个通道?512*512*3 ,然而在这里用这个语句     gray_image[i, j] = new Gray(255);  也可以给灰度图像赋值?用 什么语句可以解决为只有512*512的图像?

参考文献

 

http://www.emgu.com/wiki/index.php/Setting_up_EMGU_C_Sharp

加上二值化代码

 for (int i = 0; i < 512; i++)
                     for (int j = 0; j < 512;j++ )
                         if ((int)gray_image[i, j].Intensity>=123)
                             gray_image[i, j] = new Gray(255); //给灰度图像赋值
                         else
                             gray_image[i, j] = new Gray(0); //给灰度图像赋值 

1 0