1, 固定阈值Threshold
函数原型:
public static double Threshold(InputArray src,OutputArray dst,double thresh,double maxval,ThresholdTypes type);
src:    输入图像
dst:    输出图像
thresh: 阈值
maxval: 阈值最大
type: 阈值类型,详解见下
Binary: 阈值二值化(大于阈值的让它等于最大值,小于的等于最小值)
BinaryInv: 阈值反二值化(二值化阈值相反,大于阈值为最小值,小于阈值为最大值)
Trunc: 截断(大于阈值的就等于阈值,小的不变)
ToZero: 阈值归零(当大于阈值的不变,小于阈值的归零)
ToZeroIv: 阈值归零取反(与阈值取零相反,大于时为最小值,小于时保持不变)
 
while (true){Console.WriteLine("请输入阈值");string Value = Console.ReadLine();Int32 result = 0;if (int.TryParse(Value, out result)){if (result>255||result <0){continue;}//阈值操作Mat src = new Mat(@"I:\OpenCvSharp学习\3副本.jpg", ImreadModes.AnyColor);Window srcWin = new Window("src", WindowMode.AutoSize, src);Mat dst = new Mat();Mat Binary = new Mat();Mat BinaryInv = new Mat();Mat Trunc = new Mat();Mat ToZero = new Mat();Mat ToZeroInv = new Mat();Mat Mask = new Mat();Mat Otsu = new Mat();Mat Triangle = new Mat();Cv2.CvtColor(src, dst, ColorConversionCodes.BGR2GRAY);Window dstWin = new Window("dst", WindowMode.AutoSize, dst);Cv2.Threshold(dst, Binary, result, 255, ThresholdTypes.Binary);Cv2.Threshold(dst, BinaryInv, result, 255, ThresholdTypes.BinaryInv);Cv2.Threshold(dst, Trunc, result, 255, ThresholdTypes.Trunc);Cv2.Threshold(dst, dst, result, 255, ThresholdTypes.Trunc);Cv2.Threshold(dst, ToZero, result, 255, ThresholdTypes.Tozero);Cv2.Threshold(dst, ToZeroInv, result, 255, ThresholdTypes.TozeroInv);Cv2.Threshold(dst, Mask, result, 255, ThresholdTypes.Mask);Cv2.Threshold(dst, Otsu, result, 255, ThresholdTypes.Otsu);Cv2.Threshold(dst, Triangle, result, 255, ThresholdTypes.Triangle);Window dstWin1 = new Window("Binary", WindowMode.Normal, Binary);Window dstWin2 = new Window("Binary", WindowMode.Normal, BinaryInv);Window dstWin3 = new Window("BinaryInv", WindowMode.Normal, Trunc);Window dstWin4 = new Window("Trunc", WindowMode.Normal, ToZero);Window dstWin5 = new Window("ToZero", WindowMode.Normal, ToZero);Window dstWin6 = new Window("ToZeroInv", WindowMode.Normal, ToZeroInv);Window dstWin7 = new Window("Mask", WindowMode.Normal, Mask);Window dstWin8 = new Window("Otsu", WindowMode.Normal, Otsu);Window dstWin9 = new Window("Triangle", WindowMode.Normal, Triangle);Cv2.WaitKey(0);}else{continue;}Console.ReadKey();}
以下图片是阈值为160时的各个阈值类型的图像
2, 自动阈值AdaptiveThreshold
public static void AdaptiveThreshold(InputArray src,OutputArray dst,ouble maxValue,AdaptiveThresholdTypes adaptiveMethod,ThresholdTypes thresholdType,int blockSize,double c);
src:    输入图像
dst:    输出图像
maxValue:  赋给满足条件的像素的非零值
adaptiveMethod:    自适应阈值的算法
thresholdType:    阈值类型必须为THRESH_BINARY或THRESH_BINARY_INV
blockSize:    用于计算像素阈值的像素邻域大小:3、5、7,等等。
c : 常数减去平均值或加权平均值(详见下文)。通常,它是正的,但也可以是零或负的
Mat src = new Mat(@"I:\OpenCvSharp学习\3副本.jpg", ImreadModes.AnyColor);Window srcWin = new Window("src", WindowMode.AutoSize, src);Mat dst = new Mat();Mat GaussianC = new Mat();Mat MeanC = new Mat();Mat GaussianCInv = new Mat();Mat MeanCInv = new Mat();Cv2.CvtColor(src, dst, ColorConversionCodes.BGR2GRAY);Window dstWin = new Window("dst", WindowMode.AutoSize, dst);Cv2.AdaptiveThreshold(dst, GaussianC, 255,AdaptiveThresholdTypes.GaussianC,ThresholdTypes.Binary,11,5);Cv2.AdaptiveThreshold(dst, GaussianCInv, 255, AdaptiveThresholdTypes.GaussianC, ThresholdTypes.BinaryInv, 11, 5);Cv2.AdaptiveThreshold(dst, MeanC, 255, AdaptiveThresholdTypes.MeanC, ThresholdTypes.Binary, 11, 5);Cv2.AdaptiveThreshold(dst, MeanCInv, 255, AdaptiveThresholdTypes.MeanC, ThresholdTypes.BinaryInv, 11, 5);Window dstWin1 = new Window("GaussianC", WindowMode.Normal, GaussianC);Window dstWin11 = new Window("GaussianCInv", WindowMode.Normal, GaussianCInv);Window dstWin2 = new Window("MeanC", WindowMode.Normal, MeanC);Window dstWin21 = new Window("MeanCInv", WindowMode.Normal, MeanCInv);Cv2.WaitKey(0);

