65.9K
CodeProject is changing. Read more.
Home

Binarizing image (Thresholding) using EmguCV

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.67/5 (2 votes)

Jul 6, 2013

CPOL
viewsIcon

34998

Step by step method of thresholding a image using the EmguCV API in C#

For a grayscale image this is simple:

OpenFileDialog open = new OpenFileDialog();
open.Filter = "Image Files (*.tif; *.dcm; *.jpg; *.jpeg; *.bmp)|*.tif; *.dcm; *.jpg; *.jpeg; *.bmp";
int threshold_value = 50; //0-255
if (open.ShowDialog() == DialogResult.OK)
{
    Image<Gray,Byte> img = new Image<Gray,Byte>(open.FileName);
    pictureBox1.Image = img.ToBitmap(); //Display if you want
    img = img.ThresholdBinary(new Gray(threshold_value), new Gray(255));
   //Image<Gray,Byte> Binary_Image = img.ThresholdBinary(new Gray(threshold_value),
   //   new Gray(255)); // to get it saved in seperate variable 
    pictureBox2.Image = img .ToBitmap(); //display results in different picturebox
}

If you want to play with things a little you can add a trackbar to your form, put the minimum to 0 and maximum to 255, and use this code.

private void trackBar1_Scroll(object sender, EventArgs e)
{
    int trackbar = trackBar1.Value;
    label1.Text = trackbar.ToString(); //use a label to display trackbar value
    if (img != null)
    {
        using (Image<Gray,Byte> Gray = img.ThresholdBinary(new Gray(trackbar), new Gray(255)))
        {
            pictureBox2.Image = Gray.ToBitmap();
        }
    }
}

For a colour image things are a little different:

OpenFileDialog open = new OpenFileDialog();
open.Filter = "Image Files (*.tif; *.dcm; *.jpg; *.jpeg; *.bmp)|*.tif; *.dcm; *.jpg; *.jpeg; *.bmp";
int Blue_threshold = 50; //0-255
int Green_threshold = 50; //0-255
int Red_threshold = 50; //0-255
if (open.ShowDialog() == DialogResult.OK)
{
    Image<bgr,Byte> img_colour = new Image<bgr,Byte>(open.FileName);
    pictureBox1.Image = img_colour.ToBitmap(); //Display if you want
    img_colour = img_colour.ThresholdBinary(
      new Bgr(Blue_threshold, Green_threshold, Red_threshold), new Bgr(255, 255, 255));
    pictureBox2.Image = img_colour.ToBitmap();//display results in different picturebox
}