在圖像處理,二值化圖像很重要的,尤其在機器視覺中,找MARK,找零件中心點,必須使用,減少資料處理量。
1.CvInvoke 類中
public static double Threshold(
IInputArray src,//輸入必須為單通道圖像
IOutputArray dst,//輸出圖像
double threshold,//閥值
double maxValue,//最大值
ThresholdType thresholdType//閥值變換的類型。
)
變換的類型,不同圖像轉換後不同:
2.自适應門檻值
public static void AdaptiveThreshold(
IInputArray src,//輸入必須為單通道圖像
IOutputArray dst,//輸出同輸入尺寸單通道圖檔
double maxValue,//最大值
AdaptiveThresholdType adaptiveType,//自适應門檻值的類型
ThresholdType thresholdType,//閥值變換的類型,同上
int blockSize,//像數領域大小,如果為3就是3*3區域
double param1 )//均值或高斯權重平均值所需要減去的一個常數,相當幹預值
執行個體練習:
Emgu.CV.Image<Bgr, Byte> YUAN = new Image<Bgr, Byte>((Bitmap)pictureBox1.Image);
Mat a1 = YUAN.Convert<Gray, Byte>().Mat;//變成灰圖
Mat a2 = new Mat(a1.Size, Emgu.CV.CvEnum.DepthType.Cv8U, 1);//定義跟a1一緻的圖像
CvInvoke.Threshold(a1, a2, (double)numericUpDown1.Value, 255, Emgu.CV.CvEnum.ThresholdType.Binary);
pictureBox2.Image = a2.Bitmap;
CvInvoke.AdaptiveThreshold(a1,a2,255,Emgu.CV.CvEnum.AdaptiveThresholdType.MeanC,Emgu.CV.CvEnum.ThresholdType.Binary, 3, (double)numericUpDown1.Value);