C#-OpenCvSharp二值化阈值
本文链接:https://blog.csdn.net/qq_40344307/article/details/90741857
Mat panda = Cv2.ImRead("panda.png",ImreadModes.Grayscale);//必须为灰度图单通道
//1.简单阈值分割
//ThresholdTypes.BINARY 二进制阈值化,非黑即白
//ThresholdTypes.BINARY_INV 反二进制阈值化,非白即黑
//ThresholdTypes.TRUNC 截断阈值化 ,大于阈值设为阈值
//ThresholdTypes.TOZERO 阈值化为0 ,小于阈值设为0
//ThresholdTypes.INV 反阈值化为0 ,大于阈值设为0
Cv2.Threshold(panda,panda,127,255,ThresholdTypes.Binary);
//2.自适应阈值分割
//简单阈值算法使用全局阈值,但一副图像的不同位置光照情况可能不同,全局阈值会失去很多信息。这种情况下采用自适应阈值。
//自适应会根据图片一小块区域的值来计算对应区域的阈值。
//Block Size---图片中分块的大小。
//C---阈值计算方法中的常数项
//AdaptiveThresholdTypes.MEAN_C 通过平均的方法取得平均值
//AdaptiveThresholdTypes.GAUSSIAN_C 通过高斯取得高斯值
Cv2.AdaptiveThreshold(panda,panda,255,AdaptiveThresholdTypes.MeanC,ThresholdTypes.Binary,11,2);
//3. Otsu’s 二值化(大津阈值分割法)
//Otsu’s 二值化是对一副双峰图像自动根据其直方图计算出一个阈值。(对于非双峰图像,这种方法得到的结果可能会不理想)。
//这里用到到的函数还是 cv2.threshold(): cv2.THRESH_OTSU。
//这时要把阈值设为 0。然后算法会找到最优阈值,这个最优阈值就是返回值 retVal。如果不使用 Otsu 二值化,返回的retVal 值与设定的阈值相等。
Cv2.Threshold(panda,panda, 0, 255, ThresholdTypes.Otsu);