C#联合OpenCV(六)阈值分割-全局阈值与局部阈值

阈值分割

- 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);

猜你喜欢

转载自blog.csdn.net/weixin_43852823/article/details/127746181