Emgu 學習筆記(二)---圖像二值化,自適應閾值化,Otsu二值化

圖像二值化,自適應閾值化,Otsu二值化

Emgu灰度化、二值化操作方法和OpenCV中區別不大,Threshold()來實現的。

自適應閾值是整幅圖像使用一個閾值,自適應閾值是圖像的不同區域使用不同的閾值,而這個閾值是對整個區域計算出來的。在Emgu中也是調用函數AdaptiveThreshold()來實現的。

public static AdaptiveThreshold(IInputArray src,IOutputArray dst,double maxValue,AdaptiveThresholdType adativeType,ThresholdType thresholdType,int blockSize,double param1)

AdaptiveThresholdType adativeType:自適應閾值計算方法:MeanC和GaussianC

ThresholdType thresholdType:必須爲二值化閾值化或者是反二值化閾值化(Binary/BinaryInv)

int blockSize:計算使用的區域矩陣大小:3,5,7,9


來看代碼實現:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.Util;
using Emgu.CV.CvEnum;
namespace 全局閾值
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            Image<Bgr, Byte> image = new Image<Bgr, Byte>(Properties.Resources._2);
            pictureBox1.Image = image.ToBitmap();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            using (var image = new Image<Bgr, Byte>(Properties.Resources._2))
            {
                var grayImage = image.Convert<Gray, Byte>();
               
                pictureBox1.Image = grayImage.ToBitmap();
               

            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Image<Bgr, Byte> image = new Image<Bgr, Byte>(Properties.Resources._2);
            var grayImage = image.Convert<Gray, Byte>();
            var threshImage = grayImage.CopyBlank();
            CvInvoke.Threshold(grayImage, threshImage, 150, 255, ThresholdType.Binary);
            pictureBox2.Image = threshImage.ToBitmap();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            var grayImage = new Image<Gray, Byte>(Properties.Resources._2);
            var threshImage = grayImage.ThresholdAdaptive(new Gray(255), AdaptiveThresholdType.MeanC, ThresholdType.Binary, 9, new Gray(5));
            pictureBox3.Image = threshImage.ToBitmap();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            var grayImage = new Image<Gray, Byte>(Properties.Resources._2);
            var threshImge = grayImage.CopyBlank();
            CvInvoke.Threshold(grayImage, threshImge, 0, 255, ThresholdType.Otsu);
            pictureBox4.Image = threshImge.ToBitmap();
        }
    }
}


效果圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章