EMGU 阈值、滤波处理

        ///
        /// 对整张图片设定两个值进行阈值处理
        ///

        /// 输入一张图片
        /// 输出一张图片
        /// 阈值
        /// 最大的阈值
        /// 处理阈值的类型
        ///

        public static double Threshold(IInputArray src, IOutputArray dst, double threshold, double maxValue, ThresholdType thresholdType);
        // 摘要:   Threshold方法最后一个枚举参数
        //     Types of thresholding
        public enum ThresholdType
        {
            // 摘要: value>=阈值就为最大值,否则为0.   最大值是'maxValue'方法所设定的最大值
            //     value = value > threshold ? max_value : 0
            Binary = 0,
            //
            // 摘要:(返向阈值)  value>=阈值就为0,否则为最大值. 最大值是'maxValue'方法所设定的最大值
            //     value = value > threshold ? 0 : max_value
            BinaryInv = 1,
            //
            // 摘要:  value>=阈值就为threshold,否则值不变.
            //     value = value > threshold ? threshold : value
            Trunc = 2,
            //
            // 摘要:   value>=阈值就value不变,否则为0
            //     value = value > threshold ? value : 0
            ToZero = 3,
            //
            // 摘要:  value>=阈值为0,否则为value不变
            //     value = value > threshold ? 0 : value
            ToZeroInv = 4,
            //
            Mask = 7,
            //
            // 摘要: 使用Otsu算法选择最优阈值,和Threshold调用的threshold与maxValue没有关系.
            //     use Otsu algorithm to choose the optimal threshold value; combine the flag
            //     with one of the above CV_THRESH_* values
            Otsu = 8,

        }

//////////////////////////////////////////局部阈值///////////////////////////////////////////////////

        ///


        /// 局部阈值,应用于边缘处理.
        ///

        /// 输入一张8位或32位图片
        /// 输出一张图片
        /// 给定最大阈值
        /// 人为阈值是AdaptiveThresholdType枚举算出来的,平均自适应阈值和高斯阈值.
        /// 阈值类型处理,请参见前面Threshold方法介绍
        /// 用来计算阈值的象素邻域大小: 3, 5, 7, ...
        /// 人工干预阈值
        public static void AdaptiveThreshold(IInputArray src, IOutputArray dst, double maxValue, AdaptiveThresholdType adaptiveType, ThresholdType thresholdType, int blockSize, double param1);
        // 摘要: 
        //     Types of Adaptive Threshold
        public enum AdaptiveThresholdType
        {
            // 摘要: 平均值应用于自适应阈值。
            //     indicates that "Mean minus C" should be used for adaptive threshold.
            MeanC = 0,
            // 摘要:  高斯均值应用于阈值。
            //     indicates that "Gaussian minus C" should be used for adaptive threshold.
            GaussianC = 1,
        }

//如果第五个参数使用Emgu.CV.CvEnum.ThresholdType.Binary,最后一个param1值越大就越偏向白色,如果param1值为负数就偏向黑色.

/////////////////////////////////////////////////////////滤波////////////////////////////////////////////////////

        ///


        /// 模糊的图像进行中值滤波.特别是处理椒盐滤波.
        ///

        /// 输入图片
        /// 输出图片
        /// 孔径线性大小;它必须是奇数和大于1
        public static void MedianBlur(IInputArray src, IOutputArray dst, int ksize);

//均值滤波和高斯滤波会让图片变的模糊,可能用的不多,没做笔记.

        ///


        /// 双边滤波,保护边缘的平滑滤波器.类相机磨皮处理(美颜效果)
        ///

        /// 输入图像
        /// 输出图像
        /// 表示在过滤的过程中的每个像素的直径,如果非正数,它将会从sigmaSpace计算得到.
        /// 颜色空间的滤波器的'西格玛'值,更大的值的参数意味着更远的颜色像素内
        /// 坐标空间中滤波的'西格玛'值,当D>0,d指定的了领域大小与sigmaSpace无关.
        /// 边界模式用于推断像素的图像,设定为默认
        public static void BilateralFilter(IInputArray src, IOutputArray dst, int d, double sigmaColor, double sigmaSpace, BorderType borderType = BorderType.Default);

例:CvInvoke.BilateralFilter(img, dst, 10, 30, 15);

//////////////////////////////////////////////////////自定义滤波//////////////////////////////////

        ///


        /// 自定义滤波
        ///

        /// 源图
        /// 输出图片
        /// 单通道内核矩阵
        /// 内核偏移量,中心表示为(-1,-1)
        /// 0
        /// 推断出图像外部像素的某种边界.一般都不写(预设)
        public static void Filter2D(IInputArray src, IOutputArray dst, IInputArray kernel, Point anchor, double delta = 0, BorderType borderType = BorderType.Default);

例:

            int[, ,] date = new[, ,] { { { -1 }, { -1 }, { -1 } }, { { -1 }, { 9 }, { -1 } }, { { -1 }, { -1 }, { -1 } } };
            Image kennel = new Image(date);
            Image img = new Image(of.FileName);
            Image dst = new Image(of.FileName);//这里不能Image dst = img;
            CvInvoke.Filter2D(img, dst, kennel, new Point(-1, -1));

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////






你可能感兴趣的:(EMGU)