阈值分割
- src: 输入图,只能输入单通道图像,通常来说为灰度图
- dst: 输出图
- thresh: 阈值
- maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
- type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
- cv2.THRESH_BINARY 超过阈值部分取maxval(最大值),否则取0
- cv2.THRESH_BINARY_INV THRESH_BINARY的反转
- cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变
- cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
- cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转
Threshold:全局阈值
固定阈值与自动阈值
AdaptiveThreshold:局部阈值
局部均值二值化与局部 高斯二值化
public static void thresoldforexample()
{
var Src_Images = Cv2.ImRead("lenna.png");
Cv2.CvtColor(Src_Images, Src_Images,ColorConversionCodes.BGR2GRAY);
var Dstimage = new Mat();
//0-Binary 超过thresh阈值置位maxval 否则为0
//1-BinaryInv 与Binary 相反翻转 超过设置为0 否则为maxval
//2-Trunc 大于阈值部分设为阈值,否则不变
//3-Tozero 大于阈值部分不改变,否则设为0
//4-TozeroInv Tozero翻转 大于阈值设置为0 其余部分不改变
//8-OTSU 自动阈值
Cv2.Threshold(Src_Images, Dstimage, 100, 255, ThresholdTypes.Binary);
//var Dstimage2 = new Mat();
//Cv2.InRange(Src_Images,100,200, Dstimage);
var Dstimage1 = new Mat();
//MeanC 阈值是邻近区域的平均值减去常数C
//GaussianC 阈值是邻近区域的高斯加强总和减去常数C
//blocksize 邻近像素的大小,可理解为矩阵。
Cv2.AdaptiveThreshold(Src_Images, Dstimage1, 255, AdaptiveThresholdTypes.MeanC,ThresholdTypes.Binary,5,10);
Cv2.ImShow("1", Src_Images);
Cv2.ImShow("2", Dstimage);
Cv2.ImShow("3", Dstimage1);
}
双阈值-与Halcon类似。选择两个值中间的灰度值
var Dstimage = new Mat();
//双阈值模式
Cv2.InRange(Src_Images,100,200, Dstimage);